[英]Testing if a controller works in angularjs using jasmine
尝试测试方法控制器时遇到一些问题。 所以,这是我的控制器,名为contactCtrl
'use strict'; (function () { angular.module('routerApp').controller('ContactController', function ($scope, contactRepository) { $scope.saveContact = function(selectedContact) { $scope.errors = []; contactRepository.saveContactInfo(selectedContact); $scope.contactSelected = false; }; $scope.cancel = function() { $scope.contactSelected = false; $scope.selectedContact = null; }; $scope.selectContact = function(contact) { $scope.contactSelected = true; $scope.selectedContact = contact; }; }); }());
这是我的contactRepository
'use strict'; (function () { angular.module('routerApp').factory('contactRepository', function() { return { saveContactInfo: function (selectedContact) { console.log(selectedContact); } }; }); }());
这是我的规范文件,名为contactCtrl.spec.js
describe('Controller',function() { var scope,contactCtrl; beforeEach(module('routerApp')); beforeEach(inject(function ($rootScope, $controller) { scope = $rootScope.$new(); contactCtrl = $controller('ContactController',{$scope:scope}); })); describe('ContactController', function() { it('save method should have contactSelected false', function() { expect(contactCtrl.contactSelected).toBe(false); }); }); })
我想测试当我运行save方法是否真的有效。
您将必须实际调用该函数,然后断言该值是您期望的值。 所有这些都需要在您的scope
变量而不是控制器上完成。
describe('ContactController', function() {
it('save method should have contactSelected false', function() {
expect(scope.contatSelected).toBeUndefined();
scope.saveContact('foo');
expect(scope.contactSelected).toBe(false);
});
});
如果要检查控制器方法是否调用了工厂方法,则需要创建一个间谍,然后在调用控制器函数后检查是否已调用间谍:
describe('Controller',function() {
var scope,contactCtrl, contactRepository;
beforeEach(module('routerApp'));
beforeEach(inject(function ($rootScope, $controller, _contactRepository_) {
scope = $rootScope.$new();
// inject your factory so we can spy on it
contactRepository = _contactRepository_;
contactCtrl = $controller('ContactController',{$scope:scope});
// create spy
spyOn(contactRepository, 'saveContactInfo');
}));
describe('ContactController', function() {
it('save method should have contactSelected false', function() {
expect(scope.contatSelected).toBeUndefined();
scope.saveContact('foo');
expect(scope.contactSelected).toBe(false);
// assert that function was called
expect(contactRepository.saveContactInfo).toHaveBeenCalled()
});
});
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.