RSpec:before(:all) 和 before(:each) 之间的深入差异

标签 rspec

好的,所以我遇到了一个非常奇怪的问题,与 before 块直接相关。我正在通过 Watir 和 RSpec 进行集成测试。对于检查用户是否可以执行登录的简单测试,我通过 factory_girl 在数据库中创建了一个“用户”记录。

所以我把下面的代码:

before(:each) do
  @user = Factory(:user)
end

if "should perform a login" do
  # do stuff
end

do stuff我调用浏览器并查看用户如何尝试登录。不幸的是,不知何故他不能这样做——“用户名无效”。

经过一番调查,我发现如果我将创建用户的代码放在 before(:all) 中块,万事如意 .怎么样? :all有什么区别和 :each在这种情况下?此外,如果我将用于创建用户的代码实际放在测试正文中,它仍然不起作用(即用户不知何故未添加到数据库或其他东西)。

最佳答案

您可能启用了事务性装置,因此您的 Watir 进程不会在每个 RSpec 示例所包含的事务中看到数据库更改。

尝试禁用事务功能并使用类似 database cleaner 的东西在每个例子之前得到一个干净的石板。

关于RSpec:before(:all) 和 before(:each) 之间的深入差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2600821/

相关文章:

ruby-on-rails - Rails 中工厂女孩的单表继承

ruby-on-rails - 如何使用 Fabrication 和 RSpec 构建和测试 has_and_belongs_to_many (HABTM) 关联?

ruby-on-rails - RSpec 测试应该进行到何种程度?

ruby - DRY 与重复特征规范

ruby-on-rails - 如何在 rspec 测试中设置 HTTP_USER_AGENT

ruby-on-rails - 为什么where()。first_or_create仅在RSpec中生成不正确的SQL?

ruby-on-rails - 一个 has_many :through Relationship 的 Rails RSpec 测试

ruby-on-rails - 测试 View 编辑表单时 Rspec 失败

ruby - 循环要求 Ruby 问题

ruby-on-rails - "Capybara::ElementNotFound: no button with value or id or text ' 遵循 Hartl 第 11 章中的 ' found"