gpt4 book ai didi

angularjs - 对具有依赖项的 AngularJS 工厂进行单元测试

转载 作者:行者123 更新时间:2023-12-03 05:18:30 25 4
gpt4 key购买 nike

在对 Angular 工厂(使用 Karma + Jasmine)进行单元测试时,如何将 stub 依赖项注入(inject)到被测工厂中?

这是我的工厂:

mod = angular.module('myFactoryMod', []);

mod.factory('myFactory', [
'$log', 'oneOfMyOtherServices', function($log, svc) {
return makeSomethingThatDoesSomethingWithTheseDependencies($log, svc);
}
]);
实例化我的工厂时需要

oneOfMyOtherServices

这是我的测试:

it('can get an instance of my factory', function() {
var oneOfMyOtherServicesStub;

angular.mock.module('myFactoryMod');

oneOfMyOtherServicesStub = {
someVariable: 1
};

//****How do I get my stub in my target? ****

angular.mock.inject(['myFactory', function(target) {

expect(target).toBeDefined();

}
]);
})

注意我知道 $controller 允许 Controller 这样做,但我没有看到工厂的等效项。

最佳答案

据我所知,有两种方法可以完成这样的事情:

  1. 使用 $provide 和匿名模块来注入(inject)模拟。
  2. 注入(inject)您想要模拟的服务并使用 jasmine 的监视功能来提供模拟值。

只有当您确切知道被测代码将在注入(inject)的服务上调用哪些方法并且您可以轻松模拟它们时,第二个选项才有效。由于您似乎正在访问服务上的数据属性(而不是方法),因此采用第一个选项可能是最好的。

使用 $provide 大致如下所示:

describe('myFactory', function () {
// Load your module.
beforeEach(module('myFactoryMod'));

// Setup the mock service in an anonymous module.
beforeEach(module(function ($provide) {
$provide.value('oneOfMyOtherServicesStub', {
someVariable: 1
});
}));

it('can get an instance of my factory', inject(function(myFactory) {
expect(myFactory).toBeDefined();
}));
});

关于angularjs - 对具有依赖项的 AngularJS 工厂进行单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16565531/

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