неопределенная локальная переменная или метод `params 'для контроллера - PullRequest
0 голосов
/ 19 ноября 2018

Я пытаюсь реализовать диспетчер контактов с рельсами. Я использую RSpec для разработки через тестирование.

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

Я пытаюсь подтвердить это действие.

В моем классе контроллеров

describe "POST #create" do
context "with valid params" do
  let(:alice) { Person.create(first_name: 'Alice', last_name: 'Smith') }
  let(:valid_attributes) { {number: '555-1234', person_id: alice.id} }

  it "creates a new PhoneNumber" do
    expect {
      post :create, params: {phone_number: valid_attributes}, session: valid_session
    }.to change(PhoneNumber, :count).by(1)
  end

  it "redirects to the phone number's person" do
    post :create, params: {:phone_number => valid_attributes}, session: valid_session
    @phone_number = PhoneNumber.new(person_id: params[:person_id])
    expect(response).to redirect_to(@phone_number.person)
  end
end

Я хочу перенаправить на номер телефона, но при получении номера телефона Это дает мне ошибку undefined local variable or method params' for #<RSpec::ExampleGroups::PhoneNumbersController::POSTCreate::WithValidParams:0x00007fc89e276898>

У меня также есть проверка вида следующим образом

 it 'adds a new phone number' do
  page.click_link('Add phone number')
  page.fill_in('Number', with: '555-8888')
  page.click_button('Create Phone number')
  expect(current_path).to eq(person_path(person))
  expect(page).to have_content('555-8888')
end

В данный момент этот тест также не выполняется из-за этой ошибки:

expected: "/people/1"
got: "/phone_numbers"

Как я могу решить эти проблемы и перенаправить пользователя по желанию? Заранее спасибо

1 Ответ

0 голосов
/ 19 ноября 2018

В вашем тесте нет такой вещи, как params.

Вместо ...

@phone_number = PhoneNumber.new(person_id: params[:person_id])

... вы могли бы сделать ...

@phone_number = PhoneNumber.new(person_id: valid_attributes[:person_id])

Но так как вы просто проверяете, что перенаправили к человеку, вы можете полностью удалить вышеуказанную строку и выполнить

expect(response).to redirect_to(alice)
...