2017-05-01 14 views
0

마이크 하얼의 튜토리얼 RSpec을 따르려고합니다. 암호 재설정 통합 테스트에 도달했으며 지금까지 잘 수행하고있었습니다. 그럼 내가 말한 줄에있어 user = assigns(:user)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 인스턴스 변수를 사용하고 있기 때문에 그럴 것이라고 생각합니다. 이게 중요합니까? 는'(@ valid_user.reset_token, 이메일을 : "") edit_password_reset_path를 얻을 는 redirect_to의 root_url '나는 ActionController 없음 경로가 일치라는 오류와 끝까지 .TO 내 ID는 무기 호입니다 (페이지) 기대합니다. – user12398736

+0

PasswordResetsController 클래스에서'edit' 메서드를 정의하지 않았거나 컨트롤러의 redirect_to root_url이 누락되었다고 의심 되긴하지만 컨트롤러 코드를 보지 않고도 말하기는 어렵습니다. 자습서의 12.16 섹션에서 코드와 코드를 비교합니다. 도움이되지 않으면 컨트롤러 코드, 사양 코드 및 이미 시도한 몇 가지 사항을 포함하여 새로운 질문을 제출하십시오. https://stackoverflow.com/help/how-to-ask를 참조하십시오. – MothOnMars