我有以下规范来测试 Controller 方法:
context "#create" do
it "should redirect when model is valid" do
User.stub!(:valid?).and_return(true)
post :create, :user => FactoryGirl.attributes_for(:user)
response.should redirect_to("/")
end
it "should render new template when model is invalid" do
User.stub!(:valid?).and_return(false)
post :create, :user => FactoryGirl.attributes_for(:user)
response.should render_template(:new)
end
end
和 Controller 本身:
def create
@user = User.new(params[:user])
if @user.save
redirect_to "/", :notice => "User created"
else
render "new"
end
end
相当简单的代码,但不知何故 stub!
方法并没有真正 stub ,所以第二个规范失败了 expecting <"new"> but rendering with <"">
.它只是像 valid?
一样重定向返回真。
我是 Rails 世界的新手。我错过了什么?谢谢。
最佳答案
保存对象时,Rails 会在类的实例上调用 valid?
。但是您在类本身 上标记了valid?
。那是行不通的。
您想在这里做的是在正在保存的用户的实例上 stub save
,例如
User.stub(:new) { mock_model(User, :save => true) }
@user = User.new
# @user 现在是一个模拟对象
@user.save
# 模拟对象返回 true
另一个例子:
User.stub(:new) { mock_model(User, :save => false) }
@user = User.new
# 同样,@user 是一个模拟
@user.save
# 模拟对象返回 false
关于ruby-on-rails - Rspec stub 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9954801/