Rspec的测试模板被渲染
问题描述:
我试着去测试,其中在成功注册成功的模板由以下控制器代码Rspec的测试模板被渲染
def create
@user = User.new(params[:user])
if @user.save
render :template => "success"
else
flash[:notice] = "Oops Somethings not quite right! :("
render :action => "new"
end
end
我使用以下规范来测试这个代码
before(:each) do
@user = User.new
@user.attributes = valid_attributes
@params = valid_attributes
@user.stub!(:save).and_return(true)
end
def do_post
post :create
end
it "should create new user " do
count = User.count
do_post
user = User.new(@params)
user.save.should eql(true)
User.count.should eql(count + 1)
end
it "should render the success page on successful signup" do
do_post
@user.save
response.should render_template("success") if @user.save
end
渲染的条件
但这个例子失败“它应该在成功注册成功渲染页面”与此错误消息
1)
'UsersController handling POST /users should render the success page on successful signup' FAILED
expected "success", got "users/new.html.erb"
./spec/controllers/users_controller_spec.rb:67:
成功视图是存储在views/users /中的模板,无需执行任何操作。我猜我即将犯一个非常根本的错误,并希望得到一些帮助。
答
您正在测试@user
变量,但控制器将实例化一个新实例,因此该存根将不会到位。
在这种情况下使用存根不是一个好主意,只是为了模拟成功的保存调用。你为什么不提供有效的数据,并确保行动是成功的?
以下代码适用于RSpec> 2.1并且它使用expect
语法。
before(:each) do
@params = valid_attributes
end
it "should create new user" do
@_before = User.count
post :create, :user => @params
expect(assigns(:user)).to_not be_new_record
expect(User.count).to eq(@_before + 1)
end
it "should render the success page on successful signup" do
post :create, :user => @params
expect(response).to be_successful
expect(response).to render_template("success")
end
最后,改变
render :template => "success"
到
render :action => "success"
对于以前的RSpec版本,或者如果你有使用should
语法,使用
before(:each) do
@params = valid_attributes
end
it "should create new user" do
@_before = User.count
post :create, :user => @params
assigns(:user).should_not be_new_record
User.count.should == (@_before + 1)
end
it "should render the success page on successful signup" do
post :create, :user => @params
response.should be_successful
response.should render_template("success")
end
+1
就是这样。我刚刚得到它。谢谢。我仍然在与Rspec合作的过程中。非常感谢你。 – Sid 2010-09-28 09:01:10
我会删除user.save条件最后一个断言。 – Rimian 2013-04-15 02:27:23