【问题标题】:Error testing rendering of partial with rspec使用 rspec 对部分渲染进行错误测试
【发布时间】:2014-05-28 03:48:18
【问题描述】:

我正在为我的控制器编写 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 <[]>

有人能弄清楚我为什么会收到这个错误吗?我做错了什么?

谢谢

【问题讨论】:

  • 正确!您发送 js 请求 (get :new, :format =&gt; 'js') 并且控制器中的此代码 format.js { } 有效。我认为它不应该呈现任何部分。
  • 但我如何测试它是否正确呈现new.js.erb 内容?
  • 也许可以试试response.body
  • 尝试删除块{ },所以它只变成format.js

标签: ruby-on-rails ajax rspec


【解决方案1】:

根据rails guide,语法略有不同:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多