我正在尝试测试的要点是加载页面,更新数据库中对象的状态,然后重新加载页面以查看对象的引用不再存在。有点像这样:
before do
<some setup stuff that requires js: true)
<ObjectClass>.first.update(current_state: <new state>)
visit user_path(user)
end
it "should remove the reference to the object", js: true do
should_not have_content "<Text about the object>"
end
如果相关:
config.use_transactional_fixtures = false and the use of database_cleaner
我遇到的问题是通常不会对对象进行更新。如果我再次运行测试,没有任何变化,它可能会再次失败或者可能会通过。我已经确认,在访问之后,在之前的末尾打印出状态并没有改变。没有显示数据库错误等。
对象最初是以两种方式之一创建的...在一些使用FactoryGirl的测试中,在其他测试中使用站点内的一种形式(因此通过控制器)。两种类型的测试都显示此行为。
关于可能导致这种间歇性行为的想法?
附加说明:
这是spec / support / database_cleaner.rb的内容,这可能是我现在正在密切关注的一些默认版本:
RSpec.configure do |config|
config.before(:suite) do
DatabaseCleaner.clean_with(:truncation)
end
config.before(:each) do
DatabaseCleaner.strategy = :transaction
end
config.before(:each, :js => true) do
DatabaseCleaner.strategy = :truncation
end
config.before(:each) do
DatabaseCleaner.start
end
config.after(:each) do
DatabaseCleaner.clean
end
end