3

我有一个项目,我正在使用 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
4

2 回答 2

3

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

于 2012-10-16T00:21:30.967 回答
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
于 2012-11-28T19:30:45.643 回答