Cucumber, Capybara & Rails 2.3.2 - FactoryGirl не передает записи в базу данных, но работает с консоли? - PullRequest
0 голосов
/ 18 декабря 2011

У меня странная проблема, когда я запускаю свой (только / первый) тест на огурец, часть которого создает новую запись в моей таблице "Страны", используя:

Factory.create(:country)

модели не фиксируются в моей базе данных (MySql 5) и мой тест не пройден, когда представление пытается загрузить эти данные. Вот фрагмент из моего test.log

  [4;36;1mSQL (0.1ms)[0m   [0;1mSAVEPOINT active_record_1[0m
  [4;35;1mCountry Create (0.1ms)[0m   [0mINSERT INTO `countries` (`name`, `country_code`, `currency_code`) VALUES('Ireland', 'IE', 'EUR')[0m
  [4;36;1mSQL (0.1ms)[0m   [0;1mRELEASE SAVEPOINT active_record_1[0m
  [4;35;1mSQL (0.1ms)[0m   [0mSAVEPOINT active_record_1[0m

Однако, когда я загружаю консоль rails и запускаю точно такую ​​же команду, то есть Factory.create (: country), записи фиксируются в базе данных. Вот вывод из test.log

[4;36;1mSQL (3.5ms)[0m   [0;1mBEGIN[0m
  [4;35;1mCountry Create (0.2ms)[0m   [0mINSERT INTO `countries` (`name`, `country_code`, `currency_code`) VALUES('Ireland', 'IE', 'EUR')[0m
  [4;36;1mSQL (1.1ms)[0m   [0;1mCOMMIT[0m

Из env.rb

Cucumber::Rails::World.use_transactional_fixtures = false

Любой совет очень ценится, последние два дня я пытался выяснить это, но безуспешно.

1 Ответ

0 голосов
/ 18 декабря 2011

Во второй строке того, что вы опубликовали в файле test.log, показана вставляемая запись. Я вижу, что вы отключили транзакционные устройства, и это нормально.

Вы случайно используете камень database_cleaner? Если это так, то после завершения тестов она по существу вернет вашу базу данных в исходное состояние. Это означает, что если вы не приостановите свои тесты во время их выполнения и после вставки данных, вы никогда не увидите их в БД, поскольку они удаляются после запуска набора тестов.

Я не знаю, что именно это и является причиной проблемы, но это определенно объясняет, почему, когда вы запускаете только одну команду из консоли, вы видите ее в БД, но вы не после запуска ваших тестов. Данные теста предполагаются , которые должны быть удалены после выполнения набора тестов, чтобы у ваших тестов была свежая, согласованная начальная точка для каждого запуска. Это важная часть обеспечения того, чтобы ваши тесты каждый раз выполнялись в одной и той же среде, и поэтому можно рассчитывать на получение надежных результатов.

...