分配 Rspec 错误

Assign Rspec error

我正在尝试通过 RSpec 学习 Mike Hartl 的教程。我已经完成了密码重置集成测试,到目前为止我做得很好。然后我到了 user = assigns(:user)

这行

我搜索了答案,下面是我的答案和我的错误。

失败:

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

我不知道还能做什么。

您的测试出错,因为您在测试的那个时候还没有定义 user 变量。您已经定义了@valid_user。我的猜测是如果你改变你的测试会通过: expect(assigns(:user)).to eq([user])expect(assigns(:user)).to eq(@valid_user)