我最近阅读了有关这些量角器问题的解决方案:
- 无法轻松地将上下文传递给addMockModule #695 https://github.com/angular/protractor/issues/695
- feat(addMockModule): 添加第三个参数来传递上下文 #787 https://github.com/angular/protractor/pull/787
我一直渴望干燥我的量角器测试,这就是我需要的解决方案。这个解决方案在 ChromeDriver 上运行得很好,但在 FirefoxDriver 上却出奇地出问题了。这是我的代码(在beforeEach()
block:
var httpBackendMock = function() {
angular.module('httpBackendMock', ['ngMockE2E'])
.value('mockData', arguments[0])
.run(function ($httpBackend, mockData) {
$httpBackend.whenGET(/.*aggregates/)
.respond(200, mockData.testAggregates);
$httpBackend.whenGET(/.*merchants\/123456/)
.respond(200, mockData.testMerchant);
});
};
browser.addMockModule('httpBackendMock', httpBackendMock, {
testAggregates: testAggregates,
testMerchant: testMerchant
});
(testAggregates
and testMerchant
之前已定义。)
这在 Chrome 中完美运行,但在 Firefox 中,当whenGET
期望被激发,但他们没有返回任何数据。我是否使用它都会失败mockData
对象或直接使用arguments[0]
.
但事情变得更奇怪了。如果我尝试检查mockData
我稍后在上面创建的模块值browser.executeScript()
调用,数据就在那里,并且console.log
在 Chrome 和 Firefox 中以相同的方式呈现它。
browser.get('index.html#/experiments');
browser.executeScript(function() {
return angular.injector(["httpBackendMock"]).get('mockData');
}).then(function(data) {
console.log("DATA", data);
});
当测试运行时,数据将按预期显示。
我发现的唯一解决方法是JSON.stringify()
输入到addMockModule()
and JSON.parse()
它在里面。它似乎有效,但很丑陋 - 框架应该已经处理好它了。
所以我认为这是一个错误,但我真的不确定which组件这是一个错误in.