在rspec测试中,对数据库对象的更新并不总是需要

时间:2014-08-20 02:26:45

标签: rspec

我正在尝试测试的要点是加载页面,更新数据库中对象的状态,然后重新加载页面以查看对象的引用不再存在。有点像这样:

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

0 个答案:

没有答案