問題タブ [intern]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
javascript - Javascript プロジェクトのインターンの設定
同様の質問がいくつか既に回答されていることは知っています ( Testing custom JavaScript (not Node module) with Intern and Can't get Intern to run Node.js Module ) が、それらの回答を読んだ後でも、まだできませんIntern を使用して実行するいくつかの簡単なテストを取得します。見落としている、または見逃している小さなピースが1つだけあるように感じます。
既存の Javascript プロジェクトで使用するために Intern を評価しようとしています。Node プロジェクトではなく、単純な Javascript です。問題があれば、Windows マシンでこの評価を実行しようとしています。
私のプロジェクト階層は次のようになります。
/li>インターン構成ファイル:
私は Node と AMD にかなり慣れていませんが、私のプロジェクトはノード プロジェクトではないため、loader.packages 構成を使用する必要はないと思いますか?
テストファイル spec_inwf.js
/li>次のコマンドを実行して、テストを実行してみます。
コマンドから受け取る唯一の出力は次のとおりです。
/li>
Intern 構成で suites 配列を空に設定すると、#4 のコマンドを実行すると、「0/0 tests passed」というメッセージが表示されます。これは正しい出力だと思います。しかし、テスト スイートに接続しようとしても、テストが実行されません。この方程式から他に何が欠けているのかわかりません。どんな助けでも大歓迎です。
javascript - インターン WebDriver と PhantomJS
ブラウザ (client.html) でのテスト中にメイン ユニット テストを作成し、Node を使用してテストの自動化をセットアップする準備ができました。 Sauce Labs のようなサードパーティのサービスを使用しても問題ないので、webdriver モードを使用して PhantomJS を介して Intern テストを実行しようとしています。
これらのオプションを使用して PhantomJS を実行しています。
私のインターン構成は次のようになります。
ほとんどの場合はうまくいくようですが、テストで AJAX リクエストに問題があります。テストは Intern 独自のサーバーを介して実行されるため、AJAX フィルターを追加して、要求が正しい場所に送信されるようにしました。
ただし、AJAX リクエストが失敗していることはまだわかっています。さらに調べてみると、リクエストが送信されていないことがわかりました (AJAXreadyState
は 0 で失敗します)。PhantomJS は、これ以上の情報を提供していないようです。の--web-security=false
フラグはphantomjs
、クロスドメイン リクエストが可能であることを保証する必要があるため、原因がわかりません。
PhantomJS では特定のエラーはスローされません。失敗ハンドラーに提供される唯一の情報は、「エラー」のステータスです。
編集:
jQuery を使用せずに手動で XMLHttpRequest を実行してみましたが、正常に動作します。明らかに、これは jQuery 側のものです。を有効にcrossDomain
しても解決しません。
javascript - インターン AJAX 単体テスト
Intern がテストを実行する方法で問題が発生し、jQuery で AJAX 呼び出しを使用するユニットをテストしようとしました。Intern はテスト クライアントを WebDriver サーバー (この場合はphantomjs --webdriver=8910
) に提供するため、テストは で実行されlocalhost:9000
ます。これは明らかに、Same-Origin Policy の問題を引き起こします。
これを回避してクロスドメイン リクエストを行うことはできますが、認証 Cookie が必要になるとブロックされます。これは明らかにバックエンドが の Cookie を設定しlocalhost
ていないためです。これらの Cookie にアクセスすることはできません。
proxyUrl
いくつかの異なる順列でサーバーを指すようにオプションを変更しようとしましたが、これまでのところ何も機能していません:
WebDriver のログを見ると、Intern がサーバーに load を指示していることに気付きましたhttp://localhost:9000/__intern/client.html?config=...
。に設定proxyUrl
しhttps://my.server.com/js/
てシンボリックリンクしよ__intern
うとしましintern
たが、テストが実行されていないか、に報告されていませんrunner.js
。この方法で実行すると、PhantomJS のログは次のようになります。
テスト ランナーはハングし、テストの結果を受け取りません。ただし、proxyUrl
Intern が実行するプロキシ サーバーを指していないためです。
編集 5/28
これの多くはバックエンドの変更によって回避できることに言及する価値があります (理想的には、コード ベースを強制的に適合させるのではなく、コード ベースに合わせてテスト スタックを構成できるようにする必要があります)。オプション。
client.html
理想的には、指定された URL からロードするように Intern を構成可能にしてから、 localhost:9000
JSONP などのオリジン間互換性のある手段を介してレポーターをプロキシに POST させたいと考えています。他の合理的な代替手段が見つからないため、現時点では、Intern は AJAX を介してバックエンドと通信する単体テストを完全にはサポートしていないようです。
intern - 最後の「セッション/終了」後に API へのリクエストを行う際の問題
私は現在、テスト結果を Sauce Labs に送信するカスタム レポーターに取り組んでいます。レポーターの現在のバージョンは、ここにあります。
問題は、最後のセッションの後にデータを送信しないことです。たとえば、テストするブラウザが 2 つある場合、最初にテストしたブラウザの結果のみが送信され、2 つ目のブラウザを送信する前に停止します。
リクエストは、使用可能なトピックの「セッション/終了」トピックで行われます。私が言えることから、最後のリクエストが行われる前にすべてが停止します。
setTimeout()
リクエストの代わりに使用して問題を誇示するために、より分離されたカスタム レポーターを作成しました。こちら を参照してください。
ありがとう!
intern - バージョン 1.1.0 のインターンとクライアントのパス
リリース 1.1.0 で、モジュールが兄弟と見なされなくなったことに気付きましたintern
。たとえば、以前は次のようなものを実行できましたが、以前のように代わりにhttp://localhost/intern/client.html?config=myproject/tests/config
からフェッチしようとしているようです。http://localhost/intern/myproject/tests/config.js
http://localhost/myproject/tests/config.js
これは意図的なものですか?また、先頭に追加しようとしまし../myproject/tests/config
たが、それでも相対的にフェッチしているようintern
です。