rspec测试ajax响应(应呈现部分)

rec*_*nym 8 ruby rspec ruby-on-rails

我想测试我的控制器动作是否呈现局部.

我四处乱逛,似乎找不到任何可行的东西.

创造行动:

def create
  @project = Project.new...
  respond_to do |format|
    if @project.save
      format.js { render :partial => "projects/form" }
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

规格:

it "should save and render partial" do
  ....
  #I expected/hoped this would work
  response.should render_partial("projects/form")
  #or even hopefully
  response.should render_template("projects/form")
  #no dice
end
Run Code Online (Sandbox Code Playgroud)

Blu*_*ish 49

如果你正在寻找一个真实的答案......(即完全在RSpec而不是使用Capybara),RSpec文档说render_template是assert_template的包装器.assert_template(根据文档)还表明您可以通过包含:partial键来检查部分是否已呈现.

放手一搏......

it { should render_template(:partial => '_partialname') }
Run Code Online (Sandbox Code Playgroud)


Jam*_*mes 2

更新见下面bluefish的答案,这似乎是正确的答案

您会考虑使用Capybara进行集成测试吗?我发现 ajax 很难单独使用 rspec 进行测试。就您而言,我什至不确定您是否收到回复。在水豚中,它等待 ajax 调用完成,您可以调用 page.has_xxxx 来查看它是否已更新。这是一个例子:

it "should flash a successful message" do
    visit edit_gallery_path(@gallery)
    fill_in "gallery_name", :with => "testvalue"
    click_button("Update")
    page.has_selector?("div#flash", :text => "Gallery updated.")
    page.has_content?("Gallery updated")
    click_link "Sign out"
end
Run Code Online (Sandbox Code Playgroud)