0

デフォルトでは空白で、JavaScript によってページが読み込まれると更新される span 要素があります。これはうまく機能しますが、ページの読み込みが完了する前に、 assert_select は最初の HTML しか取得できないようです。これは予想される動作ですか?私は何を間違っていますか?

_form.html.erb で生成されたスキャフォールドの span 要素:

...
<span id="confirm_loaded"></span>
...

---- app/assets/javascripts の .js ファイル:

$(function(){
  $("#confirm_loaded").html("test");
});

---- ページをロードすると -- ページは JavaScript によって更新され、すべて問題ありません。

ただし、統合テストでは、次の行:

assert_select "span#confirm_loaded", {text: "test"}

次のエラーで失敗します。

<test> expected but was
<>..
Expected 0 to be >= 1.

これは、JavaScript によって設定された更新された HTML 要素がテストで認識されていないことを確認しているように見えます (おそらく、ページが完全に読み込まれる前に実行されているのでしょうか?)

ページをすばやく変更するには、javascript を削除し、HTML をハードコーディングします。

...
<span id="confirm_loaded">test</span>
...

これでテストに合格しました (assert_select が値を取得でき、ゴールデンです)。

assert_select は HTML タグの初期値しか取得できませんか? ページの読み込み時に assert_selectが javascript によって更新された値を取得しないのはなぜですか?

ご協力いただきありがとうございます。

4

2 に答える 2

6

はい、あなたは質問で正しいと言いました。assert_selectは要素を選択し、 @response(@response.body)オブジェクトに対して等価テストを行います。これはサーバーから返された実際の応答であるため、その時点では JavaScript コードが実行されていないため、空のテキストでスパンが取得されます。スクリプトがブラウザで実行されるとき。

于 2014-05-19T12:18:42.400 に答える