繁体   English   中英

使用茉莉测试控制器是否在angularjs中工作

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM