在 Angular .config 中模拟 $window 对象
Mocking $window object inside Angular .config
我在尝试 运行 我的应用程序中的业力测试规范时遇到以下错误。
Error: [$injector:modulerr] Failed to instantiate module adf.widget.tabularWidget due to:
Error: Failed to execute 'atob' on 'Window': The string to be decoded is not correctly encoded.
at Error (native)
at C:/Users/dell%20pc/Documents/Work/Client/widgets/TabularWidget/src/ta
bularWidget.js:22:43
at Object.invoke (C:/Users/dell%20pc/Documents/Work/Client/bower_compone...
这里的问题是,当我 运行 测试时,它无法模拟 window 属性。以下是发生此问题的文件..
'use strict';
(function (windows, angular, $, _) {
angular.module('adf.widget.tabularWidget')
.config(function (dashboardProvider) {
//more code
//issue line
var widgetDefsApiUrl = window.atob(window.api) +
"Widget/definitions?access_token=" + window.atob(window.acstkn);
});
})(window, angular, $, _);
但是当我只是注释掉那一行时,每个测试用例运行都没有问题。因此,如果我能以某种方式模拟 widgetDefsApiUrl
并将其注入我的测试用例,我的问题就会得到解决。但我不知道该怎么做。谁能给我指明正确的方向?
编辑:
我已经隔离了问题。问题是 window.api
在这里未定义,因此 window.atob()
给出了错误。我将如何克服这个问题?
找到解决方案。只需要在 beforeEach 块中模拟 window 对象。
beforeEach(function() {
var window = {};
window.api = "windowsapitoken";
window.acstkn = "windowsacsapitoken";
)};
您可以直接获取 window 对象并将属性和方法附加到它上面。
beforeEach(function() {
window.api = function() {};
window.atob = function() {};
)};
我在尝试 运行 我的应用程序中的业力测试规范时遇到以下错误。
Error: [$injector:modulerr] Failed to instantiate module adf.widget.tabularWidget due to:
Error: Failed to execute 'atob' on 'Window': The string to be decoded is not correctly encoded.
at Error (native)
at C:/Users/dell%20pc/Documents/Work/Client/widgets/TabularWidget/src/ta
bularWidget.js:22:43
at Object.invoke (C:/Users/dell%20pc/Documents/Work/Client/bower_compone...
这里的问题是,当我 运行 测试时,它无法模拟 window 属性。以下是发生此问题的文件..
'use strict';
(function (windows, angular, $, _) {
angular.module('adf.widget.tabularWidget')
.config(function (dashboardProvider) {
//more code
//issue line
var widgetDefsApiUrl = window.atob(window.api) +
"Widget/definitions?access_token=" + window.atob(window.acstkn);
});
})(window, angular, $, _);
但是当我只是注释掉那一行时,每个测试用例运行都没有问题。因此,如果我能以某种方式模拟 widgetDefsApiUrl
并将其注入我的测试用例,我的问题就会得到解决。但我不知道该怎么做。谁能给我指明正确的方向?
编辑:
我已经隔离了问题。问题是 window.api
在这里未定义,因此 window.atob()
给出了错误。我将如何克服这个问题?
找到解决方案。只需要在 beforeEach 块中模拟 window 对象。
beforeEach(function() {
var window = {};
window.api = "windowsapitoken";
window.acstkn = "windowsacsapitoken";
)};
您可以直接获取 window 对象并将属性和方法附加到它上面。
beforeEach(function() {
window.api = function() {};
window.atob = function() {};
)};