我正在使用量角器在我的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