我希望能够定义一个变量,然后在module.run()函数内的respond()方法中使用所述变量。我在我的it()中有这个代码:
var testValue=randomValue(); // suffice to say, a random value generator
var httpBackendMock = function() {
angular.module('httpBackendMock', ['ngMockE2E', 'name.of.app'])
.run(function($httpBackend) {
$httpBackend.whenPOST(/.*\/api\/data/).respond(function(method, url, data, headers) {
return [200, '<?xml version="1.0" encoding="UTF-8" standalone="yes"?> \
<data>'+testValue+'</data>', {}];
});
....
但是testValue
对象上方定义的httpBackendMock
变量根本不在run()函数中可见,但是将会定义为&#39;。
我的理解是&#39; var&#39; JS中定义的变量可用于内部范围的代码,但这里没有发生。有没有办法让变量在那里工作?
答案 0 :(得分:1)
这段代码
var testValue=randomValue();
在Node中执行。这段代码
function() {
angular.module('httpBackendMock', ['ngMockE2E', 'name.of.app'])
...
}
转换为字符串,传递给客户端并在浏览器中执行。
外部函数范围在内部函数中不可用,这解释了testValue
函数中undefined
为httpBackendMock
的原因,如果httpBackendMock
函数使用严格,则会抛出错误模式。
其他数据可以通过executeScript
和addMockModule
个额外参数传递,这些参数将在客户端提供。
如图所示in documentation,前两个参数传递给浏览器。
应该是
var httpBackendMock = function(testValue) {
angular.module('httpBackendMock', ['ngMockE2E', 'name.of.app'])
...
}
...
var testValue=randomValue();
browser.addMockModule('httpBackendMock', httpBackendMock, testValue);
答案 1 :(得分:0)
答案是传入一个嵌套的值数组,并为mockmodule对象的函数签名添加一个参数。
var httpBackendMock = function(args) {
var isFoo=args[0];
var isBar=args[1];
...
browser.addMockModule('httpBackendMock', httpBackendMock, [['foo','bar']]);
找到答案: Protractor addMockModule additional arguments not working?