我目前在集成测试方面遇到问题,我在其中填写了一个在before子句中的表单,单击了提交按钮。然后我用
it "has ..." do end
检查重定向路径是否正确。但是,在完成第一个“it”语句后,我被重定向到另一个页面,并且连续几个“it”语句失败,因为我不再在页面上。
以下是示例代码段。
...
context "when the correct information is entered" do
before {
fill_in 'Email', :with => 'test@test.test'
fill_in 'Username', :with => 'some_user'
fill_in 'Password', :with => 'Password'
fill_in 'Password Confirmation', :with => 'Password'
select 'foo', :from => 'user_type'
click_button 'Save'
}
it "has valid html" do
page.should have_valid_html
end
it "has current_path users/2" do
current_path.should == users_path+'/2'
end
...
所以,在这里,“有有效的html”测试通过,但第二次测试失败,因为我被重定向到'用户'而不是留在'用户/ 2'。同样,如果我切换'it'语句的顺序,我会得到相同的结果。
我应该以不同的方式做我的“之前”还是还有其他我需要考虑的事情?
感谢您的帮助, 播卡
编辑:一个必然的信息;除了没有select字段,我在代码的其他部分几乎完全相同。如果它在所有其他情况下都有效,那可能就是问题吗?
答案 0 :(得分:0)
使用Capybara时,重要的是要记住事务夹具不起作用。换句话说,RSPEC通常会“回滚”在测试期间对数据库所做的任何更改(在这种情况下,在每个“it”语句之后)。但是,使用Capybara时,您必须手动删除元素,或使用Database Cleaner等工具截断数据库。
这一点很重要,因为我的数据库每个电子邮件只处理一个用户。
编辑:
我的修复是在索引中的最后一个用户上调用User.delete。但请记住,索引未重置,并且创建的下一个用户将从同一点增加索引。
请注意,上下文可能会被回滚,而事实并非如此。