Rspec - переменная экземпляра, назначенная с параметром let, переопределенным в представлении rails - PullRequest
0 голосов
/ 01 января 2019

Я тестирую страницу, которая загружает случайную выборку «членов» для отображения.Контроллер рельсов устанавливает их как @members.В моем тесте я пытаюсь заменить эту переменную массивом одного хэша с жестким кодом:

require "spec_helper"
describe "the page", type: :feature, js: true do

  let!(:members) do
    [{ name: "Super Grover", title: "Hero" }]
  end

  before do
    visit "/the_page"
    p members
    expect(page).to have_content "some content"
  end

  it ... etc...
end

Это функциональный тест, поэтому Capybara открывает страницу и щелкает мышью.Я добавил отпечаток в тесте (p members) и один в виде рельсов (p @members).Представление rails показывает значение, созданное в контроллере (массив случайной выборки), но тест показывает значение, которое я назначил с помощью let.

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

1 Ответ

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

Ваше приложение вызывает контроллер, а контроллер откуда-то извлекает @members (возможно, модель?), Оно не использует назначенное вами значение.Вы должны указать ему использовать свое значение, а не то, что оно получит естественным образом, это делается с помощью заглушки.Это также должно произойти до вызова страницы.

let!(:members) do
    [{ name: "Super Grover", title: "Hero" }]
end

 it 'does things' do
   allow(Member).to receive(:all).and_return(members)
    visit "/the_page"
     expect(page).to have_content "Super Grover”
     expect(page).to have_content "Hero"
  end

Примечание: если вы не звоните Member.all, вам нужно заменить :all на то, что вы звоните.

В качестве альтернативы, если ваши участники вызываются контроллеромметод, такой как «get_random_members», вы можете сделать это вместо:

  allow_any_instance_of(MembersController).to receive(:get_random_members).and_return(members)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...