如何在RSpec 2中仅为一个规范(或Steak场景)关闭事务性fixture?我尝试了一些在Web上找到的方法,但没有任何成功。
这会导致未定义方法异常。
describe "MyClass without transactional fixtures" do
self.use_transactional_fixtures = false
...
end
这根本不起任何作用(事务性fixture仍处于打开状态):
describe "MyClass without transactional fixtures" do
RSpec.configure do |config|
config.use_transactional_fixtures = false
end
...
end
我还能做什么?
7条答案
按热度按时间8ulbf1ek1#
我通常会添加这样的助手:
这允许我关闭规范中特定块的事务性fixture:
bhmjp9jg2#
为了测试使用事务的代码(这将与transactional_fixture或任何其他进行事务测试的策略相冲突,例如DatabaseCleaner.strategy =:truncation或:transaction),我使用了database_cleaner:
在我的测试案例中
ruoxqz4g3#
这曾经是一个bug(参见ticket #197),但是我现在似乎没事了。我只是不知道它是否能在每个测试库上工作(可能不行)。如果你想这样做,你可以通过把
config.use_transactional_fixtures = false
放在spec_helper.rb
上并使用DatabaseCleaner来设置全局事务性fixture。我在浏览器上测试javascript页面时也遇到过类似的问题(这种情况不适用于事务性fixture),下面是我如何解决这个问题的:http://github.com/lailsonbm/contact_manager_app
rryofs0p4#
我混合了这两个答案,它对我的RSpec 3起作用:
然后可以在describe、context或it块中使用它
z6psavjg5#
不确定这是否适用于RSpec 2,但适用于3。
请注意
use_transactional_fixtures
(rspec-rails选项)和use_transactional_tests
(activerecord固定装置选项)的区别。svdrlsy46#
当使用Rspec 2.3.8时,使用
use_transactional_tests
代替use_transactional_fixtures
lnlaulya7#
RSpec 6.0的2023年答案:
https://github.com/rspec/rspec-rails/blob/v6.0.1/spec/rspec/rails/fixture_support_spec.rb#L21