我试图测试成功注册成功模板的条件,由以下控制器代码呈现
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:
解决方法
您在测试中存储@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版本,或者如果您必须使用应用程序语法,请使用
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
原文地址:https://www.jb51.cc/ruby/273792.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。