使用Capybara和RSPEC时,在“it”语句后重定向

时间:2012-07-17 00:38:44

标签: rspec capybara

我目前在集成测试方面遇到问题,我在其中填写了一个在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字段,我在代码的其他部分几乎完全相同。如果它在所有其他情况下都有效,那可能就是问题吗?

1 个答案:

答案 0 :(得分:0)

使用Capybara时,重要的是要记住事务夹具不起作用。换句话说,RSPEC通常会“回滚”在测试期间对数据库所做的任何更改(在这种情况下,在每个“it”语句之后)。但是,使用Capybara时,您必须手动删除元素,或使用Database Cleaner等工具截断数据库。

这一点很重要,因为我的数据库每个电子邮件只处理一个用户。

编辑:

我的修复是在索引中的最后一个用户上调用User.delete。但请记住,索引未重置,并且创建的下一个用户将从同一点增加索引。

请注意,上下文可能会被回滚,而事实并非如此。