我最近读到了关于这些量角器问题的解决方案:
addMockModule
#695 我一直渴望干预我的量角器测试,这是我需要的解决方案。这个解决方案在ChromeDriver上运行得很好,但是对于FirefoxDriver来说,这个问题很奇怪。这是我的代码(在beforeEach()
块中:
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
和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()
和JSON.parse()
的输入。它似乎有效,但很难看 - 框架应该已经在处理它了。
所以我认为这是一个错误,但我真的不确定哪个组件中的 。