无法重新定义定义为常量的服务

时间:2015-06-13 14:07:32

标签: angularjs unit-testing jasmine karma-runner sinon

这是我的temp.js

angular.module('temp', [])
    .service('tempFactory', function() {
        this.a =10;
    });

这是我的temp.Spec.js

describe('temp', function() {
    var tempFactory;

    beforeEach(function() {
        var mockedTempFactory = {};

        module('temp', function($provide) {
            $provide.value('tempFactory', mockedTempFactory);
        });

        mockedTempFactory.a = 20;

        inject(function(_tempFactory_) {
            tempFactory = _tempFactory_;
        });
    });

it('console.log of a property', function() {
    console.log(tempFactory.a);
});

});

在控制台中我得到20的值。

但如果我像这样定义tempFactory:

angular.module('temp', [])
    .constant('tempFactory', {
        a: 10;
    });

在控制台中,我得到10的值。

为什么我不能重新定义最初定义为常量的tempFactory,但可以重新定义最初定义为服务,值或工厂的tempFactory?

1 个答案:

答案 0 :(得分:0)

因为当您创建服务时,您需要为其提供构造函数

.service('tempFactory', function() {
    this.a = 10;
})

Angular然后创建一个这样的函数实例:

var tempFactoryInstance = new tempFactory();
return tempFactoryInstance;

并完全返回该实例,因此您可以立即访问a属性。

常数没有做任何事情,它只是回归你传递给它的东西,所以

.constant('tempFactory', function() {
    this.a = 10;
})

只会将功能返回给您。如果您希望在这种情况下能够访问属性a,那么您必须"实例化"它:

var instance = new tempFactory();
console.log(instance.a); // 10

请参阅plunker

您可以详细了解不同提供商in the documentation的行为。