角度ツールを使用してAngular Webアプリケーションで統合テストを実行しています。私の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
を編集するだけでしたが、これは片方向転送だったようです。つまり、ブラウザでは、apiRequestsMap.aVar = 5;
を設定してもthis.apiRequestsMap_.aVar
は変更されません。
分度器APIを見ると、browser.getRegisteredMockModules
も見つかりました。残念ながらconsole.log(JSON.stringify(browser.getRegisteredMockModules()));
は[null, null, null, null, null]
を出力します。
非常に多くのコードとコンテキストを投稿して申し訳ありません!私は私の頭の上にあるので、私はコードがまだ実行することができますが、私はどの部分を削除することができるか分からなかった。おそらくWebDriverで直接API呼び出しを模擬するより良い方法がありますか?これは素晴らしい回避策です。
もう1つの可能なテイクアウェイは、機能の要求/不具合を投機開発者に提出することです。
どのオブジェクトに渡しますか?それは値だけを持っていますか? JSONに変換できますか? Seleniumを使用してJSコードを実行せずに直接ブラウザのコンソールにそのデータを印刷できますか? –
理想的には、私が渡したいオブジェクトは、すべてJSON.stringifyで変換可能なオブジェクトの配列です。私は個人的に 'console.log(JSON.stringify(req));'でこれにアクセスできます。コード経由でアクセスする方法は不明ですが、アイデアに感謝します! – hubatish
私はテストを書いているだけなので、「アサート」やその他の障害状態で「通信」することもできます。これはおそらく私が次に試すものです。 – hubatish