【发布时间】:2015-06-14 04:54:17
【问题描述】:
我想监视以下函数...但它包含一个承诺...但我收到 TypeError: 'undefined' is not an object (evalating 'modalService.showModal({}, modalOptions) .then')
因为我当然只有 spyOn(modalService,'showModal')
我该如何解释这个承诺呢??
_modalService = {
close: function (value) { console.log(value) },
dismiss: function (value) { console.log(value) },
showModal: function (value) { console.log(value) }
};
spyOn(_modalService, 'close');
spyOn(_modalService, 'dismiss');
spyOn(_modalService, 'showModal');
控制器功能:
user.resetPassword = function () {
var modalOptions = {
closeButtonText: 'Cancel',
actionButtonText: 'Reset',
headerText: 'Reset Password',
bodyText: 'Are you sure you want to reset the users password?'
};
modalService.showModal({}, modalOptions).then(function (result) {
if (result === 'ok') {
userDataService.resetPassword(user.data).then(function (result) {
$scope.$emit('showSuccessReset');
});
};
});
};
这是我的单元测试:
it('should allow the users password to be reset', function () {
var controller = createController();
controller.resetPassword();
$httpBackend.flush();
})
************************更新
所以我把它改成这样:
//Create a fake instance of the modal instance. TO ensure that the close is called
_modalService = {
close: function (value) { console.log(value) },
dismiss: function (value) { console.log(value) },
showModal: function (value) { console.log(value) }
};
spyOn(_modalService, 'close');
spyOn(_modalService, 'dismiss');
spyOn(_modalService, 'showModal').and.callThrough();
_modalService.showModal = function() {
var deferred = $q.defer();
deferred.resolve('Remote call result');
return deferred.promise;
};
说实话,虽然我不确定我能否解释这一点。虽然我了解所有异步的东西......我不确定 jasmine 是如何使用它来使其全部工作的。谁能解释一下流程???另外我觉得语法是错误的......你通常会怎么写这样看起来更好/更干净......??
【问题讨论】:
标签: angularjs unit-testing jasmine karma-jasmine