使用capybara + rspec如何编译带有空字段的表单? 我正在测试编辑资源页面,所以我有一个编译的表单,并希望清理其文本字段。这是部分测试:
context "when submitting" do
before { visit edit_post_path(post) }
it {should have_content('Editing')}
it {current_path.should == edit_post_path(post)}
describe "whit invalid information" do
before do
fill_in "post[title]", :with => "" #not working
fill_in "post[body]", :with => "" #not working
click_button "update"
end
it {current_path.should == edit_post_path(post)}
end
describe "whit valid information" do
before do
fill_in "post[title]", with: "some"
fill_in "post[body]", with: "some"
click_button "update"
end
it {should have_content('some')}
it {should have_content('some')}
it {current_path.should == post_path(post)}
end
end
答案 0 :(得分:0)
通过Chrome手动检查生成的编辑页面HTML中相关字段的实际ID /名称/标签:Firefox的InspectElement:Firebug。很有可能他们与“post [title]”不同。
UPD。尝试在页面上手动填写空字符串。它运作正常吗?我的意思是显示错误,路线是正确的。点击“更新”按钮并收到错误,你不再在edit_post_path
上。如果您@post.update
呈现Post#edit
不成功,则会发生这种情况 - 来自Post#update
行动的观看次数。
答案 1 :(得分:-1)
可能的问题是post[title]
和post[body]
是字段的名称,而不是ID。
此外,您可能需要考虑一些方法,使您的测试更加严格:capybara具有内置within
函数,可生成一个块,您可以在其中执行更多操作。查看gem页面首页上的文档:https://github.com/jnicklas/capybara。它可能看起来像:
describe "whit invalid information" do
before do
within("#post") do
fill_in "title", :with => ""
fill_in "body", :with => ""
click_button "update"
end
end
it {current_path.should == edit_post_path(post)}
end