capybara + rspec擦除表单文本字段

时间:2013-10-29 12:19:52

标签: ruby-on-rails ruby rspec capybara

使用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

2 个答案:

答案 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