gpt4 book ai didi

ruby-on-rails - Rspec stub 不起作用

转载 作者:数据小太阳 更新时间:2023-10-29 07:32:43 24 4
gpt4 key购买 nike

我有以下规范来测试 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com