0

rspecを使用して、selectタグから値を選択するかどうかをテストしようとしています。selectタグには、データベース内のすべてのユーザーのすべての名前がリストされている必要があります。サイト内を移動すると機能します。しかし、テストではFactoryGirlが作成したユーザー名は表示されないようです。

エラーは次のとおりです。

cannot select option, no option with text 'Person 4' in select box 'receiver_id'

message_pages仕様の一部を次に示します。

let(:user) { FactoryGirl.create(:user) }
let(:other_user) { FactoryGirl.create(:user) }
before do
    select other_user.name, :from => 'message[receiver_id]'
    fill_in "Subject", with: "Hello"
    fill_in "Body", with: "It's time to have fun!"
end 

これが私のビューのHTML出力です:

<label for="message_receiver_id">Receiver</label>
<select id="message_receiver_id" name="message[receiver_id]"><optionvalue="12">John</option>
<option value="13">Tom</option>
<option value="9">Jay</option>
<option value="14">Bob</option></select>
4

1 に答える 1

2

これは、を使用するときに一般的な遅延評価の問題のように見えますletドキュメントから:

letは遅延評価されることに注意してください。それが定義するメソッドが最初に呼び出されるまで評価されません。レットが使えます!各例の前にメソッドの呼び出しを強制します。

したがって、userとの両方other_userは、最初にそれらを呼び出したときにのみ作成されます。すでにページをレンダリングしている場合は、手遅れです。letに呼び出しを切り替えてみて、let!それで問題が解決するかどうかを確認してください。

(切り替えが機能すると言っているのはおかしいですuser.name。仕様に含まれている他の初期化コードを投稿できますか?)

于 2012-10-19T03:45:02.140 に答える