2

Intern がテストを実行する方法で問題が発生し、jQuery で AJAX 呼び出しを使用するユニットをテストしようとしました。Intern はテスト クライアントを WebDriver サーバー (この場合はphantomjs --webdriver=8910) に提供するため、テストは で実行されlocalhost:9000ます。これは明らかに、Same-Origin Policy の問題を引き起こします。

これを回避してクロスドメイン リクエストを行うことはできますが、認証 Cookie が必要になるとブロックされます。これは明らかにバックエンドが の Cookie を設定しlocalhostていないためです。これらの Cookie にアクセスすることはできません。

proxyUrlいくつかの異なる順列でサーバーを指すようにオプションを変更しようとしましたが、これまでのところ何も機能していません:

https://my.server.com/
https://my.server.com/js/
https://my.server.com/js/intern/
https://my.server.com/js/intern/client.html
https://my.server.com/js/intern/client.html?config=tests/intern

WebDriver のログを見ると、Intern がサーバーに load を指示していることに気付きましたhttp://localhost:9000/__intern/client.html?config=...。に設定proxyUrlhttps://my.server.com/js/てシンボリックリンクしよ__internうとしましinternたが、テストが実行されていないか、に報告されていませんrunner.js。この方法で実行すると、PhantomJS のログは次のようになります。

[DEBUG - 2013-05-24T15:17:50.930Z] SessionReqHand - _postUrlCommand - Session '194ff0a0-c485-11e2-9c64-9986b0c95ae1' is about to load URL: https://my.server.com/js/__intern/client.html?config=tests%2Fintern&sessionId=194ff0a0-c485-11e2-9c64-9986b0c95ae1&reporters=webdriver
[DEBUG - 2013-05-24T15:17:50.943Z] Session [194ff0a0-c485-11e2-9c64-9986b0c95ae1] - _execFuncAndWaitForLoadDecorator - Page Loading in Session: true
[DEBUG - 2013-05-24T15:17:50.962Z] Session [194ff0a0-c485-11e2-9c64-9986b0c95ae1] - _oneShotCallback - onLoadFinished
[DEBUG - 2013-05-24T15:17:50.962Z] Session [194ff0a0-c485-11e2-9c64-9986b0c95ae1] - _execFuncAndWaitForLoadDecorator - onLoadFinished: success
[DEBUG - 2013-05-24T15:17:51.051Z] Session [194ff0a0-c485-11e2-9c64-9986b0c95ae1] - _execFuncAndWaitForLoadDecorator - Page Loading in Session: false
[DEBUG - 2013-05-24T15:17:51.051Z] Session [194ff0a0-c485-11e2-9c64-9986b0c95ae1] - _resetOneShotCallbacksDecorator
[DEBUG - 2013-05-24T15:17:51.052Z] SessionReqHand - _SuccessHandler - status: success
[DEBUG - 2013-05-24T15:17:51.184Z] Session [194ff0a0-c485-11e2-9c64-9986b0c95ae1] - page.onConsoleMessage - Tests complete

テスト ランナーはハングし、テストの結果を受け取りません。ただし、proxyUrlIntern が実行するプロキシ サーバーを指していないためです。

編集 5/28

これの多くはバックエンドの変更によって回避できることに言及する価値があります (理想的には、コード ベースを強制的に適合させるのではなく、コード ベースに合わせてテスト スタックを構成できるようにする必要があります)。オプション。

client.html理想的には、指定された URL からロードするように Intern を構成可能にしてから、 localhost:9000JSONP などのオリジン間互換性のある手段を介してレポーターをプロキシに POST させたいと考えています。他の合理的な代替手段が見つからないため、現時点では、Intern は AJAX を介してバックエンドと通信する単体テストを完全にはサポートしていないようです。

4

2 に答える 2

2

Intern プロキシへの URL を変更して別のサーバーを指すようにする場合は、で実行されている Intern サーバーに実際にプロキシしているサーバーである必要がありますlocalhost:9000。これは、Intern ディレクトリへのシンボリック リンクを備えた単純な Web サーバーではありません。

これを行うことは、別のバックエンド (CouchDB、Apache、Node.js など) への他の種類のプロキシと同じです。nginx の場合、HttpProxyModuleを使用してproxy_pass http://localhost:9000/;. Apache の場合、mod_proxyおよびProxyPass / http://localhost:9000/. Intern サーバーが JavaScript を提供することを許可しない場合 (つまり、 にのみプロキシする__intern場合)、コード カバレッジ データを受信しないことに注意してください。そのため、テストしようとしているサービス URL を除くすべてをプロキシすることをお勧めします。

Intern にプロキシして Web サービスをテストする方法の詳細については、wiki ページのUsing Intern to unit test Ajax calls を参照してください。

于 2013-05-30T15:32:41.253 に答える
0

この情報をまとめた新しい wiki ページもあるようです: Using Intern to unit tests Ajax calls

于 2013-08-05T14:56:13.813 に答える