rspec中的事务性fixture阻止after_commit被调用,但即使我用
RSpec.configure do |config|
config.use_transactional_fixtures = false
end
after_commit callback
不运行。
这是一个包含最新rspec / rails的rails应用程序,我在上面生成了这个问题:git://github.com/sheabarton/after_commit_demo.git
发布于 2013-05-04 11:08:05
一种解决方法是手动触发commit
回调。示例:
describe SomeModel do
subject { ... }
context 'after_commit' do
after { subject.run_callbacks(:commit) }
it 'does something' do
subject.should_receive(:some_message)
end
end
end
有点晚了,但希望这能对其他人有所帮助。
发布于 2014-05-22 19:59:21
在我的例子中,我用下面的database_cleaner设置解决了这样的问题:
config.use_transactional_fixtures = false
config.before(:suite) do
DatabaseCleaner.strategy = :deletion
DatabaseCleaner.clean_with(:truncation)
end
config.before(:each) do
DatabaseCleaner.start
end
config.after(:each) do
DatabaseCleaner.clean
end
发布于 2014-11-11 01:24:43
这类似于@jamesdevar上面的答案,但是我不能添加代码块,所以我必须创建一个单独的条目。
你不需要改变整个规范套件的策略。您可以在全局范围内继续使用:transaction
,然后根据需要只使用:deletion
或:truncation
(它们都可以工作)。只需在相关规范中添加一个标志即可。
config.use_transactional_fixtures = false
config.before(:suite) do
# The :transaction strategy prevents :after_commit hooks from running
DatabaseCleaner.strategy = :transaction
DatabaseCleaner.clean_with(:truncation)
end
config.before(:each, :with_after_commit => true) do
DatabaseCleaner.strategy = :truncation
end
然后,在你的规格中:
describe "some test requiring after_commit hooks", :with_after_commit => true do
https://stackoverflow.com/questions/10656942
复制相似问题