0

だから私はテスト駆動開発に入りたいと思っていたので、自分のプロジェクトでJasmineを使うことにしました。

問題は、フィクスチャをロードできないことです。

一般的に提案されている 2 つのソリューションは次のとおりです。

  1. --allow-file-access-from-files でクロムを実行します
  2. ローカル サーバーからファイルを提供する

だから私は最初の解決策を使用しましたが、結果はありませんでした。

次に、 localhost/fixture/my_fixtureが my_fixture.html のコンテンツを返すように、Web サーバーのルートを設定しました。

したがって、手動でlocalhost/fixture/my_fixtureにアクセスすると、フィクスチャのコンテンツが画面に表示されます。しかし、私のジャスミン仕様ファイルでは、次を使用すると:

jasmine.getFixtures().fixturesPath = 'http://localhost/fixture'
loadFixtures('quizz_fixture')

次のエラーが表示されます

Error: Fixture could not be loaded: http://localhost/fixture/quizz_fixture
(status: error, message: Failed to execute 'send' on 'XMLHttpRequest': Failed to load 'http://localhost/fixture/quizz_fixture?_=1455854875950'.)

エラーで指定された URL を使用すると、ブラウザにフィクスチャのコンテンツがエラーなしで表示されます。

したがって、このエラーの理由がわかりません。洞察力のある人はいますか?

編集

  • ウェブサーバー:アパッチ
  • ブラウザ:クローム
  • OS:Windows7

編集 2

この問題は、以下の 139 行目の jasmine-jqueryで発生し、そこでfail関数が呼び出されます。ロードできないと思われる URL が実際にはブラウザで正常にロードされるため、何が起こっているのかわかりません。

jasmine.Fixtures.prototype.loadFixtureIntoCache_ = function (relativeUrl) {
    var self = this
      , url = this.makeFixtureUrl_(relativeUrl)
      , htmlText = ''
      , request = $.ajax({
        async: false, // must be synchronous to guarantee that no tests are run before fixture is loaded
        cache: false,
        url: url,
        dataType: 'html',
        success: function (data, status, $xhr) {
          htmlText = $xhr.responseText
        }
      }).fail(function ($xhr, status, err) {
          throw new Error('Fixture could not be loaded: ' + url + ' (status: ' + status + ', message: ' + err.message + ')')
      })

結果は次のとおりです。

Failed to load 'http://localhost/fixture/quizz_fixture.html?_=1456886216017'

ブラウザで呼び出されたときに機能します。私はそれを理解していません。

ありがとう。

4

3 に答える 3

0

サーバーの性質やフィクスチャがどのように見えるかについて少しでも知らなければ、答えるのは本当に難しいです。サーバーは node-http-server のような単純なファイル サーバーですか、それともアプリを指していますか? それはフィクスチャを正しく提供していますか?あなたのフィクスチャに間違いはありませんか?ここからは何とも言えません。

ただし、TDD を始めたばかりの場合は、フィクスチャを完全に避ける必要があります。TDD に慣れていない人にとって最大の課題の 1 つは、十分に小さいテストを作成することです。Jasmine フィクスチャを使用すると、非常に大きなテストを簡単に作成できます。

代わりに、ページに必要な最小限の DOM を手動で追加し、after フックでそれを削除することをお勧めします。jasmine-fixtureは、本質的にこれを行うツールです。これにより、実際にテストを作成するために必要な DOM の量を考慮する必要があり、加えている DOM の変更がテスト自体に表示されます。

于 2016-02-19T13:16:18.087 に答える
0

だから私は非常に不満足な解決策を見つけましたが、それでも解決策です。

要約する

  1. Chrome を使用して、ローカル ファイルから jasmine フィクスチャをロードしようとしましたが、これは Chrome では機能しません (これは既知のものであり、セキュリティ上の理由から無効になっています)。

  2. Chromeフラグ--allow-file-access-from-filesを使用してみましたが、うまくいきませんでした。だから私はローカルファイルからのフィクスチャの使用をあきらめました。

  3. フィクスチャ ファイルは Web サーバーから提供する必要があることを理解しました。しかし、フィクスチャのキャッシュに関連する Ajax エラーのため、どちらも機能しませんでした。jquery のバージョン (少し古い) を更新しようとしましたが、うまくいきませんでした。結局、何が問題なのか理解できませんでした。

  4. Firefox をダウンロードし、上記のポイント3 (Web サーバーによって提供されるフィクスチャ)の構成で jasmine specRunner を実行しようとしましたが、やはり機能しませんでした。

  5. firefox を使用して、ローカル フィクスチャ ファイルを使用しているポイント 1の方法に戻しましたが、うまくいきました。私はその解決策が嫌いですが、前進する必要があるので、それで十分です。

結論

この種の問題で立ち往生している場合は、時間を節約して、ローカルのフィクスチャ ファイルを使用できる Firefox を使用してください。

于 2016-03-02T03:25:41.713 に答える