4

これをデバッグするのに約1日を費やしましたが、途方に暮れています。jasmine-jquery 2.0.2 で何かが機能していないようです。

Jasmine 1.3.1 および jasmine-jquery 1.5 から最新バージョンに更新しています。フィクスチャのロード方法によっては、さまざまなエラーが発生します。jasmine-jquery を微調整して ajax.fail() メソッドにパラメーターを提供した後、「Fixture could not be loaded: ./ExposureWorksheetFixture.html (status: parsererror, message: Invalid XML」が表示されます。

私が持っているもう 1 つの効果は、サンプルのジャスミン ランナーを微調整してテストすると、「フィクスチャがゼロ、失敗がゼロ」と表示されることです。これは、jasmine-jquery、jquery 1.10.2 を参照し、フィクスチャを設定しようとすると発生します。操作を削除すると(ただし、参照は残します)、サンプルは機能します。

フィクスチャをロードしようとしたときに発生する別のエラーは、「(ステータス: エラー、メッセージ: 制限付き URI へのアクセスが拒否されました)」です。これは、割り当てられた場所にあるファイルを実際にロードしようとしたときに発生するようです。ファイルをロードするために実際のWebサーバーが必要なjqueryを指摘する別の質問を見ました.ローカルファイルパスは好きではありませんが、これらのライブラリの古いバージョンではこの問題はありません. これは Firefox で発生します。IE 8 ではがTypeError: Object doesn't support this property or method表示されます。Firefox では が表示されますError: Fixture could not be loaded: spec/javascripts/fixtures/fixture.html (status: error, message: A network error occurred.)

ここにいくつかのサンプルコードがあります...

PlayerSpec.js で:

jasmine.getFixtures().fixturesPath = "./";
...
beforeEach(function() {
  player = new Player();
  song = new Song
loadFixtures("fixture.html");
});

SpecRunner.html で、jquery と jasmine-jquery への追加の参照に注意してください。

<!DOCTYPE HTML>
<html>
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  <title>Jasmine Spec Runner v2.0.0</title>

  <link rel="shortcut icon" type="image/png" href="lib/jasmine-2.0.0/jasmine_favicon.png">
  <link rel="stylesheet" type="text/css" href="lib/jasmine-2.0.0/jasmine.css">

  <script type="text/javascript" src="lib/jasmine-2.0.0/jasmine.js"></script>
  <script type="text/javascript" src="lib/jasmine-2.0.0/jasmine-html.js"></script>
  <script type="text/javascript" src="lib/jasmine-2.0.0/boot.js"></script>
  <script type="text/javascript" src="lib/jquery-1.10.2.js"></script>
  <script type="text/javascript" src="lib/jasmine-jquery.js"></script>

  <!-- include source files here... -->
  <script type="text/javascript" src="src/Player.js"></script>
  <script type="text/javascript" src="src/Song.js"></script>

  <!-- include spec files here... -->
  <script type="text/javascript" src="spec/SpecHelper.js"></script>
  <script type="text/javascript" src="spec/PlayerSpec.js"></script>

</head>

<body>
</body>
</html>

ランナーの出力 (最初のテスト - すべてのテストが失敗)

Jasmine2.0.0finished in 0.019s

raise exceptions5 specs, 5 failuresSpec List | Failures
Player should be able to play a Song
Error: Fixture could not be loaded: spec/javascripts/fixtures/fixture.html (status: error, message: Access to restricted URI denied) in file:///D:/Temp/jas/lib/jasmine-jquery.js (line 132)
jasmine.Fixtures.prototype.loadFixtureIntoCache_/request<@file:///D:/Temp/jas/lib/jasmine-jquery.js:132 jQuery.Callbacks/fire@file:///D:/Temp/jas/lib/jquery-1.10.2.js:3048 jQuery.Callbacks/self.add@file:///D:/Temp/jas/lib/jquery-1.10.2.js:3094 jasmine.Fixtures.prototype.loadFixtureIntoCache_@file:///D:/Temp/jas/lib/jasmine-jquery.js:131 jasmine.Fixtures.prototype.getFixtureHtml_@file:///D:/Temp/jas/lib/jasmine-jquery.js:115 jasmine.Fixtures.prototype.read@file:///D:/Temp/jas/lib/jasmine-jquery.js:77 jasmine.Fixtures.prototype.load@file:///D:/Temp/jas/lib/jasmine-jquery.js:65 jasmine.Fixtures.prototype.proxyCallTo_@file:///D:/Temp/jas/lib/jasmine-jquery.js:161 window.loadFixtures@file:///D:/Temp/jas/lib/jasmine-jquery.js:763 @file:///D:/Temp/jas/spec/PlayerSpec.js:9 attemptSync@file:///D:/Temp/jas/lib/jasmine-2.0.0/jasmine.js:1510 QueueRunner.prototype.run@file:///D:/Temp/jas/lib/jasmine-2.0.0/jasmine.js:1498 QueueRunner.prototype.execute@file:///D:/Temp/jas/lib/jasmine-2.0.0/jasmine.js:1485 Env/queueRunnerFactory@file:///D:/Temp/jas/lib/jasmine-2.0.0/jasmine.js:518 Spec.prototype.execute@file:///D:/Temp/jas/lib/jasmine-2.0.0/jasmine.js:309 Suite.prototype.execute/wrapChildAsAsync/<@file:///D:/Temp/jas/lib/jasmine-2.0.0/jasmine.js:1708 attemptAsync@file:///D:/Temp/jas/lib/jasmine-2.0.0/jasmine.js:1520 QueueRunner.prototype.run@file:///D:/Temp/jas/lib/jasmine-2.0.0/jasmine.js:1496 QueueRunner.prototype.execute@file:///D:/Temp/jas/lib/jasmine-2.0.0/jasmine.js:1485 Env/queueRunnerFactory@file:///D:/Temp/jas/lib/jasmine-2.0.0/jasmine.js:518 Suite.prototype.execute@file:///D:/Temp/jas/lib/jasmine-2.0.0/jasmine.js:1696 Suite.prototype.execute/wrapChildAsAsync/<@file:///D:/Temp/jas/lib/jasmine-2.0.0/jasmine.js:1708 attemptAsync@file:///D:/Temp/jas/lib/jasmine-2.0.0/jasmine.js:1520 QueueRunner.prototype.run@file:///D:/Temp/jas/lib/jasmine-2.0.0/jasmine.js:1496 QueueRunner.prototype.execute@file:///D:/Temp/jas/lib/jasmine-2.0.0/jasmine.js:1485 Env/queueRunnerFactory@file:///D:/Temp/jas/lib/jasmine-2.0.0/jasmine.js:518 Suite.prototype.execute@file:///D:/Temp/jas/lib/jasmine-2.0.0/jasmine.js:1696 @file:///D:/Temp/jas/lib/jasmine-2.0.0/jasmine.js:541 attemptAsync@file:///D:/Temp/jas/lib/jasmine-2.0.0/jasmine.js:1520 QueueRunner.prototype.run@file:///D:/Temp/jas/lib/jasmine-2.0.0/jasmine.js:1496 QueueRunner.prototype.execute@file:///D:/Temp/jas/lib/jasmine-2.0.0/jasmine.js:1485 Env/queueRunnerFactory@file:///D:/Temp/jas/lib/jasmine-2.0.0/jasmine.js:518 @file:///D:/Temp/jas/lib/jasmine-2.0.0/jasmine.js:548 window.onload@file:///D:/Temp/jas/lib/jasmine-2.0.0/boot.js:170 

Edit 2/13/14 @ 8:32pm est: jasmine-jquery のみを更新しようとしましたが、それを行うとすべてが見事に失敗します (Jasmine 1.31)。私は、このライブラリで何かが起こっているに違いないと考えています:(

4

3 に答える 3

4

travisjeffery の回答に感謝します。それは私の問題の解決策ではありませんでしたが、別のことを試すようになりました. 私が投稿した特定のサンプルへの答えは、フィクスチャをランナーのフォルダーではなく、スペックのフォルダーに配置し、パスはランナーに対して相対的に定義されているというものでした。ただし、実際のセットアップに関する問題は残りました。ようやく動くサンプルを手に入れたので、何が間違っていたのかを突き止める作業に取り掛かりました。

主な問題は、jasmine-jquery 1.5 では有効だった HTML Fixture が、バージョン 2.0.2 では無効になったことです。一度に 1 つずつ削除することで、以前にすべての構文の可能性をカバーしたと思っていましたが、もう一度実行すると、スクリプト セクションを削除するとフィクスチャが読み込まれることがわかりました。私はそれを元に戻しましたが、html 要素の後ではなく内部に置きました。これは、XML ドキュメントの 2 つのルート要素に相当するため、BAMと見なされます。パースエラー。

もう 1 つの問題は、boot.js ファイルをロードしたにjasmine-jquery スクリプトをランナーに配置する必要があることです。そうしないと、「0 フィクスチャ 0 失敗」が発生します。その後、Jasmine の構文を更新する必要がありましたが、今では作業用のテスト セットが再びあります。これが他の人に役立つことを願っています。

于 2014-02-19T17:33:46.290 に答える
3

私はjasmine-jqueryを維持しています。

ここでは jasmine と jasmine-jquery は問題ありません。問題は、フィクスチャをロードする ajax リクエストがブラウザのセキュリティ ポリシーに準拠していないことです。これに関する jasmine-jquery の README にセクションがあります: https://github.com/velesin/jasmine-jquery/#cross-domain-policy-problems-under-chrome

于 2014-02-18T22:58:01.823 に答える
0

ありがとう。これを spec_helper.js.coffee に追加しました:

# rake spec:javascript loads specs relative to the tmp/jasmine/runner.html, need to override:
jasmine.getFixtures().fixturesPath="../../spec/javascripts/fixtures"
于 2014-07-10T17:57:23.257 に答える