私は亡くなりました。偽のログイン後にApiServiceMock
が約束を解決した後にstate.go
が呼び出されたかどうかを試してみます。
Expected spy go to have been called.
AngularJS 1.xカルマによるコンポーネントテストは、成功関数(spyOn)のテストを約束します。
私は直接それが動作state.go
トリガされた別の関数をテストする場合:私は得るこのテストのために
。だから私は約束が最初に解決されていないと思います。
角度コンポーネントを使用すると、テストは私には新しくなりました。誰かが私に間違っていることのヒントを教えてもらうことができれば、あるいは全体のアプローチが最初から間違っているかどうかを私に知らせてもいいでしょう。
login.component.ctrl.js
module.exports = function LoginComponentCtrl($state, $log, apiService) {
var vm = this;
vm.submit = function() {
apiService
.login(vm.username, vm.password)
.then(function(response) {
$state.go('storeDetail');
})
.catch(function(errData) {
$log.error(errData);
});
};
};
login.spec.js
var app = require('../../app.js');
var login = require('./login.module.js');
describe('login', function() {
var controller;
var element;
var scope;
var state;
var ApiServiceMock;
var StateMock;
var deferred;
beforeEach(angular.mock.module(app));
beforeEach(angular.mock.module(login));
describe('Component: login', function() {
beforeEach(inject(function($rootScope, $compile, $componentController, $q){
deferred = $q.defer();
ApiServiceMock = {
login: function() {
return deferred.promise;
}
};
StateMock = {
go: function() {
return true;
}
};
scope = $rootScope.$new();
controller = $componentController('login', {
$scope: scope,
apiService: ApiServiceMock,
$state: StateMock
});
element = angular.element('<login></login>');
element = $compile(element)(scope);
scope.$apply();
}));
it('on successful login', function() {
controller.username = 'Michael Jackson';
controller.password = 'dangerous123';
spyOn(StateMock, 'go').and.callThrough();
controller.submit();
deferred.resolve();
scope.$digest();
expect(StateMock.go).toHaveBeenCalled();
}););
});
});
私はこれをより明確にするために、さらに情報を追加することができるなら、私に教えてください。
Thxを@Jayを、試してみてください。これは 'it'の中でも動作します。 解決策は次のとおりです。 'deferred.resolve({});' – escapedcat