分配 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)
我正在尝试通过 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)