簡體   English   中英

用sinon,mocha,chai進行角度測試

[英]angular testing with sinon, mocha, chai

我想用mocha,sinon和chai測試我的角度應用程序。 特別是我對提交功能很感興趣。 如何為LoginResoure創建模擬或存根來測試此函數。

謝謝!

(function () {
'use strict';

class LoginController {
    constructor($state,LoginResource) {
        this.resource = LoginResource;
        this.$state = $state;
        this.credentials = {};
    }
    submit() {
      let promise = this.resource.login(this.credentials);
       promise.then(()=>{
           changeState()
      }
    }
    changeState() {
         this.$state.go('home');
    }
}


angular.module('app.login').controller('LoginController', LoginController);
})();



    (function () {
'use strict';

class LoginResource {
    constructor($resource, API_LOGIN) {
        this.$resource = $resource(API_LOGIN,{'@id':id})
    }

    login(data) {
        return this.$resource.save(data).$promise;
    }
}

angular.module('app.login').service('LoginResource', LoginResource);
})();

編輯:以前我用茉莉花做下一步:

            let deferred = $q.defer();
            deferred.resolve('Remote call result');
            mockPeopleResource = {
                createPerson: jasmine.createSpy('createPerson').and.returnValue(deferred.promise)
            };

或者如果我想要模擬@resource

    mockThen = jasmine.createSpy();
    mockGetPeoplePromise = {then: mockThen};
    mockUpdate = jasmine.createSpy().and.returnValue({$promise: mockPromise});
    mockSave = jasmine.createSpy().and.returnValue({$promise: mockPromise});
    mockGetPeopleQuery = jasmine.createSpy().and.returnValue({$promise: mockGetPeoplePromise});
    mockResource = jasmine.createSpy().and.returnValue({
        get: mockGet,
        update: mockUpdate,
        save: mockSave,
        query: mockGetPeopleQuery
    });

如果要模擬服務,可以在設置模擬值時創建測試模塊:

beforeEach(function() {
  angular.module('test', []).factory('LoginResource', function($q) {
    return {
      /* You can mock an easy login function that succeed when
         data >= 0 and fails when data < 0  */
      login: function(data) {
        return $q(function(resolve, reject) {
          if (data >= 0) return resolve();
          reject();
        });
      }
    };
  });

  module('app.login', 'test');
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM