0

ブラウザ (client.html) でのテスト中にメイン ユニット テストを作成し、Node を使用してテストの自動化をセットアップする準備ができました。 Sauce Labs のようなサードパーティのサービスを使用しても問題ないので、webdriver モードを使用して PhantomJS を介して Intern テストを実行しようとしています。

これらのオプションを使用して PhantomJS を実行しています。

$ phantomjs --ignore-ssl-errors=true --web-security=false --webdriver=8910

私のインターン構成は次のようになります。

define({
  proxyPort: 9000,
  proxyUrl: 'http://localhost:9000/',
  environments: [
    {
      browserName: 'phantom',
      version: '1.9.0',
      platform: 'Linux'
    }
  ],
  webdriver: {
    host: 'localhost',
    port: 8910
  },
  maxConcurrency: 3,
  useSauceConnect: false,
  // ...
});

ほとんどの場合はうまくいくようですが、テストで AJAX リクエストに問題があります。テストは Intern 独自のサーバーを介して実行されるため、AJAX フィルターを追加して、要求が正しい場所に送信されるようにしました。

$.ajaxPrefilter(function (options) {
  options.url = serverName + options.url;
});

ただし、AJAX リクエストが失敗していることはまだわかっています。さらに調べてみると、リクエストが送信されていないことがわかりました (AJAXreadyStateは 0 で失敗します)。PhantomJS は、これ以上の情報を提供していないようです。の--web-security=falseフラグはphantomjs、クロスドメイン リクエストが可能であることを保証する必要があるため、原因がわかりません。

PhantomJS では特定のエラーはスローされません。失敗ハンドラーに提供される唯一の情報は、「エラー」のステータスです。

編集: jQuery を使用せずに手動で XMLHttpRequest を実行してみましたが、正常に動作します。明らかに、これは jQuery 側のものです。を有効にcrossDomainしても解決しません。

4

1 に答える 1

1

そのため、まだよくわかっていない理由から、method代わりにtypeAJAX 構成で使用すると問題が解決しました (偶然見つけました)。は jQuerymethodの単なるエイリアスであるため、その理由はよくわかりません。type

s.type = options.method || options.type || s.method || s.type;

とにかく、これで問題は解決しました。

于 2013-05-23T20:45:57.293 に答える