0

我目前的集成测试有问题,我在 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”语句的顺序,我会得到相同的结果。

我应该以不同的方式做我的“之前”,还是我需要考虑其他一些事情?

感谢您的帮助,博卡

编辑:推论的一些信息;我在代码的其他部分做了几乎完全相同的事情,除了没有选择字段。如果它在所有其他情况下都有效,那可能是问题吗?

4

1 回答 1

0

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

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

编辑:

我的解决方法是对索引中的最后一个用户调用 User.delete。但是请记住,索引不会重置,并且下一个创建的用户将从同一点增加索引。

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

于 2012-07-17T02:14:12.383 回答