ActiveRecord использует пулы соединений, чтобы разные потоки могли обращаться к одной и той же базе данных. Подключение к той же базе данных, вероятно, не является проблемой здесь. Скорее всего, ваш шаг проверки выполняется слишком быстро, а веб-транзакция еще не завершена, что вызывает состояние гонки. Вы можете проверить это, введя sleep
вызов на шаге проверки:
Then /^the campaign should persist in the system$/ do
sleep 1.0
@browser.text.should =~ /#{@campaign_name}/
@browser.text.should =~ /#{@setting}/
@database_campaign = Campaign.where(:campaign_name => @campaign_name)[0]
@database_campaign.campaign_name.should == @campaign_name
end
Тем не менее, вы тестируете две разные вещи на одном шаге: текст на странице и то, что данные были сохранены в базе данных (что также выполняется с избыточностью).
Я рекомендую избегать проверки базы данных, если вы не чувствуете, что это абсолютно необходимо, что также должно исправить состояние гонки.
Then /^the campaign should persist in the system$/ do
@browser.text.should include(@campaign_name)
@browser.text.should include(@setting)
end