2014-07-24 4 views
3

У меня ужасные проблемы с получением Полтергейста и RSpec, чтобы играть вместе красиво.Rspec не создает записи в базе данных, доступные из полтергейста

Я написал следующий тест:

it "allows the trainer to view a runner" do 
    visit '/' 
    all(:xpath,'//a[@id="get-started"]').first.click 
    fill_in :name, with: "New Admin" 
    fill_in :email, with: "[email protected]" 
    fill_in :password, with: "letmein" 
    fill_in :password_confirmation, with: "letmein" 
    all(:xpath,'//input[@id="get-started-submit"]').first.click 
    @runner_1 = FactoryGirl.create(:runner, name: "Axel", email: "[email protected]") 
    visit '/runners/axel' 
    debugger 

Эффективно, что выше делает регистриует «Новый Администратор» с паролем, «letmein», а затем пытается просмотреть страницу профиля второе место для " Axel.

Где отладчик прерываний, я могу видеть, что @ runner_1 (Axel) был создан:

Runner.friendly.find('axel') 

>> #<Runner id: 2, email: "[email protected]",........> 

Однако при попытке посетить '/ полозья/Аксель', полтергейст отчеты:

ActiveRecord::RecordNotFound 

Это не проблема с маршрутами, или что-то в этом роде.

Изучив эту ошибку немного дальше, на самом деле, кажется, что все, что создано в тестовом файле, фактически не настроено в среде, к которой обращается Полтергейст.

Я не могу понять, почему. Любая помощь очень ценится.

ответ

3

Скорее всего, вы используете «транзакционные светильники» в rspec. Это означает, что каждый тест выполняется в транзакции базы данных, которая откатывается в конце теста, так что каждый тест имеет чистую базу данных.

Другие темы/программы могут не посмотреть, что происходит в транзакции. Полтергейст запускает сервер в отдельном потоке, что означает, что он не видит ничего, что записывается в базу данных в rspec (хотя к нему можно получить доступ непосредственно из кода rspec).

a description of this phenomenon on the capybara homepage. Решение состоит в том, чтобы отключить транзакционную функцию в rspec-rails и использовать что-то вроде DatabaseCleaner для сброса базы данных после теста.

Это будет работать, но, к сожалению, усечение или удаление содержимого базы данных несколько медленнее, чем при транзакционном подходе - вот почему tranasactions являются по умолчанию в первую очередь.

Смежные вопросы