Почему существует элемент, созданный и сохраненный в БД в тесте rspec, но приложение не видит его сохраненным - PullRequest
0 голосов
/ 24 января 2019

У меня проблема во время тестирования контроллера в rspec. Я создал сущность (хранится в postgres) и передал entity.id как HTTP request параметр. Я вижу, что объект был сохранен в БД в рамках теста, но контроллер не видел его.

Все запросы БД происходили в рамках одной транзакции, поэтому я подумал, что это будет проблемой.

У меня есть куча подобных тестов, поэтому нет проблем с подключением к БД и чем-то подобным.

Я попытался переместить create :entity в перед блоком и загрузил его для запроса как Entity.all.first.id. Использование let!(:entity) {create :entity} также было бесполезно. Вытащить это из контекста тоже.

// notifications_controller_spec.rb
context 'with an entity' do
  it 'renders the list of notifications' do
    entity = create :entity

    pp Entity.all // returns array with stored entity

    get :index, entity: entity.id

    expect(response.status).to eq 200
    expect(response).to render_template 'index'
  end
end



//notifications_controller.rb
def index

  pp Entity.all // returns empty array

  defaults_entity
  return render 'welcome_no_entity' if @entity.nil?

  @notifications = NotificationDecorator.decorate_collection(
    Notification::EntityScopedQuery.
      new(@entity.id, { order: { created_at: :desc } }).
      all
  )
 end

Я ожидаю увидеть сохраненную ту же сущность, что и в тесте.

Вероятно, будет какая-то глупая ошибка. Спасибо за помощь.

EDIT1:

// create entity
INSERT INTO "entities" ("name", "type", "customer_id", "created_at", "updated_at") VALUES ($1, $2, $3, $4, $5) RETURNING "id"  [["name", "test"], ["type", "complex"], ["customer_id", 514911], ["created_at", "2019-01-24 08:43:00.145471"], ["updated_at", "2019-01-24 08:43:00.145471"]]
// select in test
SELECT "entities".* FROM "entities"

Нет другого журнала, подобного SELECT "entities".* FROM "entities", даже когда он должен быть. Я также могу сказать, выберите из теста.

1 Ответ

0 голосов
/ 24 января 2019

Проблема в том, что мы используем gem Multitenant в контроллере.Так что в контроллере он не делает выбор как SELECT * FROM entities WHERE id = ?, но SELECT "entities".* FROM "entities" WHERE "entities"."customer_id" = $1

И customer_id не был определен, поэтому он был полностью случайным.

Исправлено в тесте: entity = create :entity, customer_id: customer_id

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...