ruby - 防止 Ruby on Rails 规范中的数据库回滚?

标签 ruby activerecord rspec ruby-on-rails-2

当使用 ActiveRecord 在 Ruby on Rails 2.3 中运行 RSpec 测试时,数据库会回滚到每个示例之后的 before :all block 之后的状态(it block ) .

但是,我想说明一个对象的生命周期,这意味着一个一个地检查大量示例,更改状态并测试后置条件。这对于回滚行为是不可能的。

所以澄清一下:

describe MyModel
  before :all { @thing = MyModel.create }

  it "should be settable" do
    lambda { @thing.a_number = 42 }.should_not raise_exception
  end

  it "should remember things" do
    @thing.a_number.should == 42
    # this fails because the database was rolled back ☹
  end
end

有什么方法可以持久化示例中所做的更改吗?

最佳答案

我同意 normalocity,在这种情况下,看起来您最好使用包含两个断言的单个规范。

有些情况下关闭回滚是有帮助的,例如对于 Capybara 和 Selenium 的更高级别测试,在这种情况下,您可以使用 use_transactional_fixtures 配置选项。你可以把这个

RSpec.configure do |config|
  config.use_transactional_fixtures = false
end

关于ruby - 防止 Ruby on Rails 规范中的数据库回滚?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7416812/

相关文章:

ruby-on-rails - 为什么设计在我已经登录时提示我使用基本身份验证?

delphi - 使用什么模式为 delphi win 32 应用程序构建层

ruby-on-rails - 为 has_many 或 habtm 动态创建 after_add 和 after_remove 回调?

ruby-on-rails - 在类之间共享 Rspec 测试

ruby-on-rails - 为什么无法向该对象添加 RSpec stub 方法?

ruby-on-rails - 我如何告诉 Simplecov 关注 Rails 项目中的特定目录?

ruby - gem install mysql2/无法加载这样的文件——mysql2/mysql2

ruby-on-rails - 在 Ruby on Rails IRB 中停止加载脚本执行的最佳方法

ruby-on-rails - Capybara webkit 在 RSpec 测试中将我重定向到 example.com

ruby-on-rails - Rails 对现有的 ActiveRecord 结果数组进行分页