rspec测试ajax响应(应该呈现局部)

| 我想测试我的控制器动作是否呈现了部分动作。 我四处寻找,似乎找不到任何有效的方法。 创建动作:
def create
  @project = Project.new...
  respond_to do |format|
    if @project.save
      format.js { render :partial => \"projects/form\" }
    end
  end
end
规格:
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
    
已邀请:
更新看下面bluefish的答案,看来是正确答案 您是否考虑使用Capybara进行集成测试?我发现仅使用rspec很难测试ajax。就您而言,我什至不确定您是否已收到回复。在capybara中,它等待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
    
如果您正在寻找一个真正的答案...(即完全在RSpec中而不是使用Capybara),则RSpec文档说render_template是assert_template的包装器。 assert_template(根据文档)还指示您可以通过包含:partial键来检查是否已渲染部分。 快去...
it { should render_template(:partial => \'_partialname\') }
    
测试您的ajax控制器方法的另一种好方法是检查分配,这些分配以后将用于呈现结果。这是一个小例子: 控制者
def do_something
  @awesome_result = Awesomeness.generete(params)
end
JBuilder的
json.(@awesome_result, :foo, :bar)
Rspec控制器测试
describe :do_something do

  before do
    @valid_params{\"foo\" => \"bar\"}
  end

  it \"should assign awesome result\" do
    xhr :post, :do_something, @valid_params
    assigns[\'awesome_result\'].should_not be_nil
  end

end
    

要回复问题请先登录注册