Devise & RSpec - пользователь вошел только в первом тесте - PullRequest
0 голосов
/ 03 сентября 2018

Я пишу спецификацию для контроллера RESTFul, который я использую RSpec, и мне нужно войти в систему через Devise.

Следующий код приводит к тому, что пользователь правильно вошел в первый оператор it, но не во второй.

Если я изменю before и after с :all на :each, оба оператора завершатся неудачно, как если бы пользователь не вошел в систему.

RSpec.describe SomeController, type: :controller do
  describe '#index' do
    before :all do
      @account = create(:account)
      @user = @account.users.first
      sign_in(@user)
    end

    after :all do
      sign_out(@user)
    end

    it 'should load all objects of a @user' do
      get :index

      body = JSON.parse(response.body)
      expect(body['data'].length).to eq(4)
      expect(response).to have_http_status(:ok)
    end

    it 'should load all objects of a @user' do
      get :index

      body = JSON.parse(response.body)
      expect(body['data'].length).to eq(4)
      expect(response).to have_http_status(:ok)
    end
  end
end

Я нашел несколько ответов на этот вопрос, один из которых использует Cookie Store в тестах ENV (которые не исправили это), а также этот RSpec с устройством - только первый тест зарегистрирован в , который также не помог мне с проблемой.

RSpec 3.7 Рельсы 5.2 Разработать 4.4

Помощь будет высоко оценена! спасибо

1 Ответ

0 голосов
/ 11 декабря 2018

Если вы используете ActAsTenant, не забудьте поставить ActAsTenant.current_tenant = nil в начале before (: each). Это вызвало у меня ту же проблему, что вы пишете

...