我想测试我的控制器操作是否呈现部分。
我已经四处寻找,似乎找不到任何可行的东西。
创建行动:
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
答案 0 :(得分:48)
如果你正在寻找一个真实的答案......(即完全在RSpec而不是使用Capybara),RSpec文档说render_template是assert_template的包装器。 assert_template(according to the docs)还表示您可以通过包含:partial key来检查部分是否已呈现。
放手一搏......
it { should render_template(:partial => '_partialname') }
答案 1 :(得分:2)
更新 请参阅下面的bluefish的回答,这似乎是正确答案
您是否考虑使用Capybara进行集成测试?我发现ajax难以单独使用rspec进行测试。在你的情况下,我甚至不确定你是否收到回复。在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
答案 2 :(得分:1)
测试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