我有一个项目,我使用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
答案 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