我正在编写一个角度控制器,它依赖于数据服务(数据服务转到 http 服务器),我想模拟它的行为。
我正在模拟一个名为 bard js 的库,它有一个模拟名为bard.mockService的服务的 api 。
在我正在做的 beforeEach 语句中:
beforeEach(function() {
bard.appModule('app.process.creation');
bard.inject('$controller', '$rootScope', '$q', 'processCreationDataservice');
bard.mockService(processCreationDataservice, {
createProcess: $q.when({}),
_default: $q.when([])
});
controller = $controller('ProcessCreationController');
$rootScope.$apply();
});
然后我的测试:
it('should call create process data service to create process', function() {
controller.create();
expect(processCreationDataservice.createProcess).to.have.been.calledOnce;
});
正如您在测试中看到的那样,我想断言 dataservice.createProcess 被调用一次。
控制器没有调用方法 processCreationDataservice.createProcess,但测试仍然通过。
(function() {
angular
.module('app.process.creation')
.controller('ProcessCreationController', ProcessCreationController);
ProcessCreationController.$inject = ['processCreationDataservice'];
function ProcessCreationController(processCreationDataservice) {
var vm = this;
vm.process = {
name: '',
bankId: ''
};
vm.create = function() {
};
}})();
我想知道为什么这个测试通过了,我应该怎么做才能断言该方法被调用了一次。