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=...
。に設定proxyUrl
しhttps://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
テスト ランナーはハングし、テストの結果を受け取りません。ただし、proxyUrl
Intern が実行するプロキシ サーバーを指していないためです。
編集 5/28
これの多くはバックエンドの変更によって回避できることに言及する価値があります (理想的には、コード ベースを強制的に適合させるのではなく、コード ベースに合わせてテスト スタックを構成できるようにする必要があります)。オプション。
client.html
理想的には、指定された URL からロードするように Intern を構成可能にしてから、 localhost:9000
JSONP などのオリジン間互換性のある手段を介してレポーターをプロキシに POST させたいと考えています。他の合理的な代替手段が見つからないため、現時点では、Intern は AJAX を介してバックエンドと通信する単体テストを完全にはサポートしていないようです。