私はrspec docsを読んでいると、他の場所の数を検索しましたが、私は、私はそれが必要になるまでlet
が初期化されていないことを読み、そのことをしましたRSPECのlet
とlet!
Rspecの 'let'と 'let'を区別するのに問題があります。
の違いを把握困難な時間を過ごしています値は例ごとにキャッシュされます。また、let!
が変数を直接的に強制的に存在させ、各例の呼び出しを強制することも読んでいます。私は新しいので、次の例とどう関係するか見ているのが難しいですね。 :m1
をlet!
と設定して、ページにm1.content
が存在するのはなぜですか?:user
をlet
と設定すると、ページにはtext: user.name
が含まれていると主張できますか?
subject { page }
describe "profile page" do
let(:user) { FactoryGirl.create(:user) }
let!(:m1) { FactoryGirl.create(:micropost, user: user, content: "Foo") }
let!(:m2) { FactoryGirl.create(:micropost, user: user, content: "Bar") }
before { visit user_path(user) }
it { should have_selector('h1', text: user.name) }
it { should have_selector('title', text: user.name) }
describe "microposts" do
it { should have_content(m1.content) }
it { should have_content(m2.content) }
it { should have_content(user.microposts.count) }
end
end
describe "after saving the user" do
before { click_button submit }
let(:user) { User.find_by_email('[email protected]') }
it { should have_selector('title', text: user.name) }
it { should have_success_message('Welcome') }
it { should have_link('Sign out') }
end
これは理にかなっています。したがって、m1がまだ初期化されていないため、オブジェクト(m1)にメッセージ(コンテンツ)を送信するだけでは十分ではありません。 – KMcA
これは、テストが失敗する理由ではありません。テストが失敗する理由は、マイクロポストを作成する前に既に「ページを訪問した」ため、ページに内容がないためです。あなたがまだ疑問を持っているなら、私の答えをもう少し明確にするように更新することができますか? –
もう一度私の質問(「ユーザーを保存した後」)をもう一度見て、2番目のテストで「user.name」を確認する方法はありますか? – KMcA