Как мне изменить контроллер по умолчанию в Rspec? - PullRequest
0 голосов
/ 03 июня 2019

Мне нужна аутентификация для успешного прохождения теста.

describe PostsController do
  let(:user) { create(:user) }
  describe 'POST #create' do
    let(:create_post) { post :create, params: { post: attributes_for(:post) } }

    before do
      post sessions_path, params: { login: user.email, password: user.password }
    end

    context 'with valid attributes' do
      it 'return OK' do
        create_post
        expect(response).to have_http_status(200)
      end
  end
end

post session_path - это не работает и выдает ошибку:

No route matches {:action=>"/sessions", :controller=>"posts", :login=>"jack@example.com", :password=>"qwerty"}

Как изменить стандартную PostsController наSessionsController в блоке before?

1 Ответ

1 голос
/ 03 июня 2019

В спецификациях контроллера вы говорите только с тестируемым контроллером.Если вам нужны другие контроллеры, чтобы сначала создать несколько обязательных объектов - создайте их прямо в БД.Если вам нужен аутентифицированный пользователь - установите session[:user_id] напрямую (или, тем не менее, ваша аутентификация работает).См., Например, этот ответ .

То, что вы пытались сделать, называется «спецификацией функции» (или «спецификацией интеграции»).Это другой тип спецификации, и вы должны написать некоторые из них.

...