使用RSpec / Capybara确定表单提交

时间:2012-10-15 23:50:21

标签: ruby-on-rails ruby unit-testing rspec capybara

我有一个项目,我使用RSpec和Capybara进行单元测试。我已经完全刷新了模型和控制器测试,这些测试传递得非常好并且可以处理繁重的数据库验证。

我现在正在测试用户体验和前端项目,并想知道我如何验证表单没有提交。如果用户不匹配密码或其他一些错误数据,我有脚本来设置错误并阻止提交。

我知道我可以搜索错误文本,但有哪种方法可以检查“提交”从未发生过,并且确信没有服务器旅行。

我想要类似的东西:

it "should not sumbit if user name is less than 3 characters" do
  visit /edit_account_settings(@user)
  fill_in "username", :with => "fo"
  click_button "SAVE"

  # HOW DO I DO THIS?
  expect( ... ).not_to submit_to_server 
end

2 个答案:

答案 0 :(得分:3)

这不是您应该在集成测试中测试的内容。在集成测试中,您正在考虑最终用户的观点,因此您应该只测试用户可以实际看到的内容。如果用户看到表单尚未提交的唯一证据是错误消息,那么这就是您应该测试的内容。

答案 1 :(得分:3)

在集成测试中,我们大多数测试用户会看到什么,如果给出一个空字段,那么根据验证必须有错误消息。但是如果你想要检查如下

describe "User Registration" do

  before do
    visit /edit_account_settings(@user)
    fill_in "username", :with => "fo"
    click_button "SAVE"
  end

  it "should not sumbit if user name is less than 3 characters" do
    page.should have_content "your error message" 
  end

  it "should create the user and redirect to blah_path" do 
    current_path.should eq blah_path
  end

  it "should add user in users table" do
    expect { user.create }.to change(User, :count).from(0).to(1)
  end

end