2016-06-06 1 views
0

Один из моих тестов начался с ошибкой. Ранее он работал и просматривал те же действия вручную в браузере, показывая функцию, которая будет работать.Записи, созданные с помощью FactoryGirl, недоступны в контроллере

создать записи, которые должны быть проверены, как это:

will = FactoryGirl.create(:user, profile: "security of the internet", first_name: "will") 

Исследовать, я добавил вызов

binding.pry 

в мой контроллер. Действие выполняет поиск пользователей.

Если я сделать:

User.all 

в монтировки строке ни один пользователь не показаны, пустой результат.

Если я ворвался в фактический тест с помощью pry, User.all отображает ожидаемые записи.

Что может быть причиной этого?

ответ

0

Обычно это потому, что ваш тест отмечен js: true и использует драйвер JS-совместимости, но вы используете тестирование транзакционной базы данных. При использовании драйверов «полного браузера» приложение и тесты запускаются. Различные потоки, поэтому каждый из них имеет собственное соединение с базой данных. Это означает, что объекты, созданные в одной потоковой транзакции, не отображаются в другой до тех пор, пока не будут совершены, но при использовании тестирования на основе транзакций ничего не происходит. Чтобы исправить, отключите транзакционное тестирование и используйте усечение или удаление для этого теста - см. Database_cleaner

+0

Мой тест не отмечен как js: true, и у меня уже есть database_cleaner, настроенный на использование усечения – Will

+0

@ Добавить свою базу данных в Cleaner и Capybara configs на вопрос –

+0

Использование database_cleaner с усечением не означает, что вы не используете запуск тестов в транзакции. Обычно они собираются вместе, но настройка одного из них не будет автоматически настраивать другую. Найдите свой код для 'use_transactional_fixtures', чтобы узнать, не делаете ли вы что-нибудь необычное с этим параметром. –