【问题标题】:Determining Form Submission with RSpec/Capybara使用 RSpec/Capybara 确定表单提交
【发布时间】:2012-10-06 00:23:34
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 我不同意。测试应该是用户“体验”到的,而不是他们看到的。他们当然确实体验过服务器帖子,这不是我想要发生的。
    • 无论他们经历什么,您都应该能够通过界面进行测试。他们不会直接体验服务器帖子(这是您要测试的内容),他们会通过错误消息或您提供的任何其他输出来体验它。
    【解决方案2】:

    在集成测试中,我们最常测试的是如果给定一个空字段,用户会看到什么,那么根据验证肯定会有错误消息。但是,如果你想要你检查如下

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-05-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-11
      • 1970-01-01
      • 2016-10-19
      相关资源
      最近更新 更多