2017-05-01 4 views
0

私はRSpecでMike Hartlのチュートリアルに従おうとしています。私はパスワードリセット統合テストに達しましたが、これまではうまくいっていました。その後、私は言った行になった​​Rspecエラーを割り当てよう

私はここに私が持っているものと私のエラーが検索されました。

障害:

PasswordResets Password resets email input valid email sends password and redirects to root Failure/Error: expect(assigns(:user)).to eq([user])

NameError: 
    undefined local variable or method `user' for #<RSpec::ExampleGroups::PasswordResets::PasswordResets::EmailInput:0x007fc5d16b0ca8> 
# ./spec/requests/password_resets_spec.rb:26:in `block (4 levels) in <top (required)>' 

require 'rails_helper' 
RSpec.describe "PasswordResets", type: :request do 
describe "Password resets" do 
    before do 
    ActionMailer::Base.deliveries.clear 
    @valid_user = create(:user) 
    end 

    describe "unsuccessful password reset" do 
    it "flashes danger when email is blank" do 
    get new_password_reset_path(@valid_user.id) 
    post password_resets_path, params: { password_reset: { email: " " } } 
    expect(flash[:danger]).to be_present 
    expect(page).to render_template(:new) 
    end 
end 

    describe "email input" do 
    it "valid email sends password and redirects to root" do 
     post password_resets_path, params: { password_reset: { email: @valid_user.email } } 
     expect(@valid_user.reset_digest).not_to match (@valid_user.reload.reset_digest) 
     expect(ActionMailer::Base.deliveries.size).to eq(1) 
     expect(flash[:info]).to be_present 
     expect(page).to redirect_to root_url 
     expect(assigns(:user)).to eq([user]) 
    end 
end 
end 
end` 

私は私が行うには他に何かわからないhttps://www.railstutorial.org/book/password_reset 12.18

を以下のよチュートリアル。

答えて

3

テスト中にuser変数が定義されていないため、テストにエラーが発生しています。あなたはと定義されています。@valid_userと定義されています。あなたが変更した場合、私の推測では、通過するテストです: expect(assigns(:user)).to eq([user])expect(assigns(:user)).to eq(@valid_user)

+0

を、これは働いていた、ありがとうございます。チュートリアルで既に定義したユーザーを参照していたことはわかりませんでした。チュートリアルを続けると – user12398736

+0

になります。 次の行も失敗しますが、私はそれが単なるユーザーの代わりにインスタンス変数@valid_userを使用しているためだと思います。これは問題ですか? 'edit_password_reset_pathを取得(valid_user.reset_token @、電子メール:"「) (ページ).TO redirect_to root_urlを期待する」 私はActionController NOルートが一致し、私のidがnilであるというエラーになってしまいます。 – user12398736

+0

PasswordResetsControllerクラスの 'edit'メソッドが定義されていないか、コントローラーのどこかに' redirect_to root_url'がありませんが、コントローラーコードを見ずに言うのは難しいと思います。私はチュートリアルの12.16セクションのコードとあなたのコードをチェックします。それでも問題が解決しない場合は、コントローラコード、スペックコード、すでに試したことを含む新しい質問を提出してください。 https://stackoverflow.com/help/how-to-askを参照してください。 – MothOnMars