gpt4 book ai didi

javascript - 在 AngularJS 测试中交换模块值

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:34:43 26 4
gpt4 key购买 nike

我有一个带有 greet 工厂的模块:

angular.module('someModule', [])
.factory('greet', function(name) {
return function() {
return 'Hi ' + name + '!';
}
});

这个工厂注入(inject)了一个 name,它是在其他模块中定义的值。

angular.module('someOtherModule', [])
.value('name', 'example');

测试此模块时,我希望能够多次更改我的可注入(inject)name 的值(每次测试一次),以便我的测试看起来像:

// In my test file…

// Initialise the module I am testing `greet` upon, and mock the other module which has a `name` value
beforeEach(mocks.module('someModule', function ($provider) {
$provider.value('name', 'Bob');
}));

var greet

beforeEach(mocks.inject(function ($injector) {
greet = $injector.get('greet');
});

it('should say "Bob"', function () {
expect(greet()).toBe('Hi Bob!');
});

// Now I need to change the `name` value to be "Bar" instead

it('should say "Bar"', function () {
expect(greet()).toBe('Hi Bar!');
});

这怎么可能?

这两个模块与我的应用模块组成:

angular.module('app', ['someModule', 'someOtherModule'])

最佳答案

您可以使用 $provide.value('name', 'Bob'); 来注入(inject)值。

var myApp = angular.module('myApp', []);

myApp.factory('greet', function (name) {
return function () {
return 'Hi ' + name + '!';
}
});

myApp.value('name', 'example');

describe('myApp', function () {
beforeEach(angular.mock.module('myApp'));

it('should say "Bob"', function () {
module(function ($provide) {
$provide.value('name', 'Bob');
});
angular.mock.inject(function ($injector) {
var greet = $injector.get('greet');
expect(greet()).toBe('Hi Bob!');
})
});

it('should say "Bar"', function () {
module(function ($provide) {
$provide.value('name', 'Bar');
});
angular.mock.inject(function ($injector) {
var greet = $injector.get('greet');
expect(greet()).toBe('Hi Bar!');
})
});
});

我为您创建了一个演示,希望它能对您有所帮助!

已更新:演示

Demo

关于javascript - 在 AngularJS 测试中交换模块值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18253417/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com