AngularJS更改常数值,传递给单元测试的配置
发布时间:2020-12-17 07:38:52 所属栏目:安全 来源:网络整理
导读:有没有改变传递给单元测试模块的配置功能的常数值? 我有以下(小提琴here): //--- CODE --------------------------var module = angular.module("myApp",[]);module.constant("myConstant","foo");module.provider("awesomeStuff",function () { var value
有没有改变传递给单元测试模块的配置功能的常数值?
我有以下(小提琴here): //--- 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"); })); }); JSFiddle:http://jsfiddle.net/f0nmbv3c/ (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |