我正在使用量角器在我的Angular web应用上运行集成测试。我的网络应用使用我自定义的Angular服务ApiClient
进行API调用。我用browser.addMockModule
和angular.module().factory()
嘲笑那项服务。这让我嘲笑我所有的后端API!这里是我的代码:如何使用量角器将消息从浏览器发送到WebDriver?
setup() {
// Out in WebDriver.
// Third argument 'apiRequestsMap' is made available as an argument 'map'
// to the anonymous function which constructs the module.
browser.addMockModule(
'mockDataModule',
(map) =>
angular.module('mockDataModule', []).value('apiRequestsMap', map),
this.apiRequestsMap_);
const apiModuleMaker =() => {
const mockModule = angular.module('mockapiModule', ['mockDataModule']);
mockModule.factory(
'apiClient',
($q, apiRequestsMap) => ({
request: (req) => {
// In Browser.
// I can access 'apiRequestsMap'!
// And I use it to mock those API calls.
}
}));
};
browser.addMockModule('mockapiModule', apiModuleMaker);
browser.get('www.mywebpage.com/example');
}
这工作得很好,让我建立了模拟的API在我的量角器测试。重要的是我可以将this.apiRequestsMap_
变量从WebDriver传递到浏览器,作为apiRequestsMap
。
现在我想知道 - 我可以做相反的事吗? 如何将浏览器中的变量传回WebDriver?
我的第一次尝试只是编辑我通过的apiRequestsMap
对象。但是这似乎是单向传输。即在In Browser中,设置apiRequestsMap.aVar = 5;
不会更改this.apiRequestsMap_.aVar
。
看着量角器API,我也找到了browser.getRegisteredMockModules
。不幸的是console.log(JSON.stringify(browser.getRegisteredMockModules()));
打印出[null, null, null, null, null]
。
对不起,张贴这么多的代码和上下文!我在头上,所以我不确定哪些部分可以删除,同时允许我的代码仍然运行。也许有更好的方法直接用WebDriver模拟API调用?这将是一个很好的解决方法。
另一个可能的外卖是我向量角器开发人员提交功能请求/错误。
你想通过什么对象?它只有价值吗?它可以转换为JSON吗?您是否能够直接在浏览器控制台中打印数据,而无需使用Selenium执行JS代码? –
理想情况下,我想传递的完整对象是一个对象数组(全部能够使用JSON.stringify进行转换)。我现在可以用console.log(JSON.stringify(req));''亲自访问它。不知道如何通过代码访问,但感谢这个想法! – hubatish
因为我只是在写测试,所以我可能也只能通过'assert'或其他故障条件进行“沟通”。这可能是我接下来会尝试的。 – hubatish