有没有改变传递给单元测试模块的配置功能的常数值?
//--- CODE -------------------------- var module = angular.module("myApp",[]); module.constant("myConstant","foo"); module.provider("awesomeStuff",function () { var value; this.setValue = function (val) { value = val; }; this.$get = function () { return { myValue: value }; }; }); module.config(function (myConstant,awesomeStuffProvider) { //want to mock myConstant awesomeStuffProvider.setValue(myConstant); }); //--- Specs ------------------------- describe("foo",function() { beforeEach(angular.mock.module("myApp",function ($provide) { //Attempt to override the myConstant value that gets passed to config $provide.constant("myConstant","bar"); })); it("has a value of bar",inject(function(awesomeStuff,$injector) { expect($injector.get("myConstant")).toBe("bar"); expect(awesomeStuff.myValue).toBe("bar"); })); });
我知道这是一个微不足道的例子,但我想知道是否可能得到一个不同的常量注入到配置…我知道有可能获得提供者的引用并调用setValue函数从单元测试(即通过this SO post配置提供商),但这不是我正在寻找的.
感谢任何帮助.
考虑以下几点:
beforeEach(angular.mock.module("myApp"));
在你的情况下你有:
beforeEach(angular.mock.module("myApp",function ($provide) { //Attempt to override the myConstant value that gets passed to config $provide.constant("myConstant","bar"); }));
现在发生的情况基本上与以下情况相同:
var module = angular.module("myApp",[]); ... Constant and Provider omitted ... module.config(function(myConstant,awesomeStuffProvider) { awesomeStuffProvider.setValue(myConstant); }); module.config(function($provide) { $provide.constant("myConstant","bar"); });
如果您需要在使用任何配置函数之前模拟一个常量,我建议将其放在单独的模块中.
根据您的用例,您现在可以:
>创建此模块的两个版本 – 一个用于生产,另一个用于测试
>只创建真实版本,并在测试中模拟常量
第二种情况看起来像这样:
应用程序:
angular.module("configuration",[]).constant("myConstant","foo"); var module = angular.module("myApp",["configuration"]); module.provider("awesomeStuff",function () { var value; this.setValue = function (val) { value = val; }; this.$get = function () { return { myValue: value }; }; }); module.config(function (myConstant,awesomeStuffProvider) { awesomeStuffProvider.setValue(myConstant); });
测试:
describe("foo",function () { beforeEach(function () { angular.mock.module("configuration",function ($provide) { $provide.constant("myConstant","bar"); }); angular.mock.module("myApp",function () { // Something else }); }); it("has a value of bar",inject(function (awesomeStuff,$injector) { expect($injector.get("myConstant")).toBe("bar"); expect(awesomeStuff.myValue).toBe("bar"); })); });
原文地址:https://www.jb51.cc/angularjs/142662.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。