这是我的rspec代码:
describe User do
before{(@user=User.new(username:"abcdefg",email:"123456@123.com",password:"123456")}
subject(@user)
@user.save
end
我收到了这样的错误:undefined method 'save' for nil:NilClass(NoMethodError)
我尝试在rails控制台中编写相同的代码,它只是起作用。但是当谈到Rspec时,它失败了,我找不到任何理由......
有人可以帮我吗?
答案 0 :(得分:6)
这是Rspec方式:
describe User do
let(:valid_user) { User.new(username:"abcdefg",email:"123456@123.com",password:"123456") }
it "can be saved" do
expect(valid_user.save).to be_true
end
end
请注意,您应该避免在规范中使用数据库操作,这是使它们变慢的原因。
另一点,请考虑使用工厂来清理您的规格。
答案 1 :(得分:5)
您需要将代码包装在示例块中(即,使用块调用it
方法),因为在describe
块的上下文中,@user
未定义。例如:
describe User do
before{(@user=User.new(username:"abcdefg",email:"123456@123.com",password:"123456")}
subject(@user)
it "can be saved" do
@user.should respond_to(:save)
@user.save.should_not be_false
end
end
编辑:我还注意到您有subject(@user)
但可能需要一个块才能正确设置。以下是整体清洁:
describe User do
let(:user) { User.new(username:"abcdefg",email:"123456@123.com",password:"123456") }
it "can be saved" do
user.should respond_to(:save)
user.save.should_not be_false
end
end