AngularJS:使用持久的根视镜测试服务

时间:2014-03-10 13:06:59

标签: angularjs mocha

我想测试我的AngularJS警报服务(使用Mocha和Chai):

describe('service', function() {
    var alertService;
    var $rootScope;

    beforeEach(module('components.services'));
    beforeEach(inject(function(_alertService_, _$rootScope_) {
        alertService = _alertService_;
        $rootScope = _$rootScope_;
    }));

    describe('alertService', function() {
        it('should start with zero alerts', function() {
            $rootScope.should.have.property('alerts').with.length(0);
        });

        it('should add an alert of type danger', function() {
            alertService.add('danger', 'Test Alert!');
            $rootScope.should.have.property('alerts').with.length(1);
        });

        it('should add an alert of type warning', function() {
            alertService.add('warning', 'Test Alert!');
            $rootScope.should.have.property('alerts').with.length(2);
        });

        it('should close via the alert', function() {
            var alert = $rootScope.alerts[0];
            alert.should.have.property('close');
            alert.close();
            $rootScope.should.have.property('alerts').with.length(1);
        });
    });
});

但是,beforeEach方法在每次测试之前重置rootScope(我有点期望它在每个“describe”之前运行,而不是每个“it”),所以计算警报的数量是行不通的。

最好的方法是什么?在一个大的“它”中有多个断言?我对一般的单元测试和Javascript都很陌生,所以任何解释都是非常受欢迎的。

1 个答案:

答案 0 :(得分:0)

它正在重置rootScope,因为你已将它声明为变量并且实际上没有注入到方法中...尝试传入$ rootScope并删除它的var声明。