当使用 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/