Rya*_*Zhu 4 rspec ruby-on-rails
这是我的rspec代码:
describe User do
before{(@user=User.new(username:"abcdefg",email:"123456@123.com",password:"123456")}
subject(@user)
@user.save
end
Run Code Online (Sandbox Code Playgroud)
我有这样一个错误: undefined method 'save' for nil:NilClass(NoMethodError)
我尝试在rails控制台中编写相同的代码,它只是起作用.但是当谈到Rspec时,它失败了,我找不到任何理由......
任何人都可以帮助我吗?
这是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
Run Code Online (Sandbox Code Playgroud)
请注意,您应该避免在规范中使用数据库操作,这是使它们变慢的原因.
另一点,考虑使用工厂来清理你的规格.
您需要将代码包装在示例块中(即,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
Run Code Online (Sandbox Code Playgroud)
编辑:我也注意到你有,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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5535 次 |
| 最近记录: |