Ruby   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了ruby-on-rails – 渲染的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 /中没有操作的模板.我猜想我犯了一个非常根本的错误,并希望得到一些帮助.

@H_607_15@解决方法
您在测试中存储@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

大佬总结

以上是大佬教程为你收集整理的ruby-on-rails – 渲染的Rspec测试模板全部内容,希望文章能够帮你解决ruby-on-rails – 渲染的Rspec测试模板所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。