При запуске rake: модели огурца ActiveRecord не могут получить доступ к той же базе данных, что и приложение - PullRequest
1 голос
/ 30 марта 2012

Я использую Cucumber с веб-браузером Watir для автоматизации тестов. Я использую Watir для заполнения веб-формы, которая сохраняет модель в моей базе данных. Однако, когда я пытаюсь подтвердить, что запись существует с использованием ActiveRecord, мой поиск не возвращает никаких результатов. Я полагаю, что мог бы использовать Watir для автоматизации каждого этапа моих тестов, но в будущем мой набор тестов начнет работать ОЧЕНЬ медленно.

Моя особенность:

Feature: Creating a campaign

As someone with too much time on my hands
I want to create a campaign
So that I can monitor my roleplaying campaigns

Scenario: Adding a Campaign
    Given I am at the site
    When I create a campaign "The Hills" with a setting "Cali"
    Then the campaign should persist in the system

Мои определения шагов:

Given /^I create a campaign "([^"]*)" with a setting "([^"]*)"$/ do |name, setting|
  @browser.text_field(:id => "campaign_campaign_name").set name
  @browser.text_field(:id => "campaign_setting").set setting
  @browser.button(:value => "Create Campaign").click
  @campaign_name = name
  @setting = setting
end

Then /^the campaign should persist in the system$/ do
  @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

ПРИМЕЧАНИЕ. Я пытался установить соединение с моей тестовой базой данных, но это тоже не сработало. Я написал файл ruby ​​в каталоге поддержки, содержащий это:

def establish_connection_to_test_database
  begin
    ActiveRecord::Base.establish_connection :test
  rescue
    raise "You have not established a connection to the test database"
  end
end

establish_connection_to_test_database

1 Ответ

1 голос
/ 02 апреля 2012

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...