使用rspec测试部分渲染时出错

时间:2014-05-28 03:48:19

标签: ruby-on-rails ajax rspec

我正在为我的控制器编写rspec测试,并尝试测试部分渲染,当动作由AJAX请求触发时。

在我的控制器代码中,我有:

def new
  ...
  respond_to do |format|
    format.html { render action: "new" }
    format.js   { }
  end
end

我将文件new.html.erbnew.js.erb放置在正确的视图目录中。

我的rspec测试如下:

it "should render the new partial" do
  get :new, :format => 'js'
  response.should render_template(:partial => 'new')
end

执行此rspec测试时,我收到以下错误:

Failure/Error: response.should render_template(:partial => 'new')
  expecting partial <"new"> but action rendered <[]>

有人可以解释为什么我会收到此错误吗?我做错了什么?

谢谢

1 个答案:

答案 0 :(得分:4)

根据rails指南,语法略有不同:

http://edgeguides.rubyonrails.org/upgrading_ruby_on_rails.html#csrf-protection-from-remote-script-tags

您的测试应该是这样的:

it 'assigns instance of Item to @item and renders new.js.erb' do  
    xhr :get, :new, format: :js
    expect(assigns[:item]).to be_an_instance_of Item
    expect(response).to render_template('new')
end

您的控制器看起来像:

class ItemsController < ApplicationController
   def new
     @item = Item.new
   end
 end

您的视图将是.js.erb文件

 items/new.js.erb