Ruby on rails 在let()中使用哈希
我试图通过在let中放入一个散列并调用let来干燥代码,但它似乎不起作用。我发现以下错误:Ruby on rails 在let()中使用哈希,ruby-on-rails,ruby,rspec,Ruby On Rails,Ruby,Rspec,我试图通过在let中放入一个散列并调用let来干燥代码,但它似乎不起作用。我发现以下错误: syntax error, unexpected =>, expecting '}' (SyntaxError) "email" => user.email, syntax error, unexpected =>, expecting :: or '[' or '.' ...l" => user.email, "password" => user.password }
syntax error, unexpected =>, expecting '}' (SyntaxError) "email" => user.email,
syntax error, unexpected =>, expecting :: or '[' or '.' ...l" => user.email, "password" => user.password }
这是我的测试:
describe '#create' do
let(:user) { create(:user) }
let(:user_params) { "email" => user.email, "password" => user.password }
before(:each) { User.stub(:find_by_email).and_return(user) }
it "should send find message to user model" do
User.should_receive(:find_by_email)
post :create, locale: "es", user: { user_params }
end
it "should set user to @user" do
post :create, locale: "es", user: { "email" => user.email, "password" => user.password }
assigns(:user).should eq(user)
end
end
这是我的代码:
def create
@user = User.find_by_email(params[:email])
if @user && @user.authenticate(params[:password])
session[:user_id] = @user.id
redirect_to root_url
else
render 'login'
end
end
你少了一副牙套
let(:user_params) { "email" => user.email, "password" => user.password }
应该是
let(:user_params) { {"email" => user.email, "password" => user.password} }
我希望解释得再长一点。 当你这样写的时候:
let(:user_params) { "email" => user.email, "password" => user.password }
使用一个参数(:user_params
)和一个块(在本例中为{“email”=>user.email,“password”=>user.password}
)调用方法let
)。我要再次声明:
let(:something) { some_method_call }
及
他们是平等的。通过使用let,RSpec将变量设置为块的结果。因此,在块内部,您需要返回一些内容。在本例中-哈希:
let(:user_params) do
{ "email" => user.email, "password" => user.password }
end
就这样!你可以了解更多关于let on的信息
let(:user_params) do
{ "email" => user.email, "password" => user.password }
end