rspe c rails как проверить, что экземпляр instance_to создан ActiveRecord :: Associations :: CollectionProxy - PullRequest
0 голосов
/ 17 апреля 2020

Написание rspe c тестов для метода SessionsController create, где я сначала создаю пользователя (has_many :authorizations) с аргументом Omniauth ha sh, а затем использую отношение коллекции прокси для создать Авторизацию (belongs_to :user) с аргументом Omniauth ha sh.

По иронии судьбы, выяснили, как написать код, но очень хотелось бы узнать, как написать для него тестовую спецификацию c. Код работает правильно и выглядит следующим образом:

  user = User.create_with_omniauth(auth_hash['info'])
  auth = user.authorizations.create_with_omniauth(auth_hash)

В зависимости от того, как я его сформулирую, я получаю сообщение об ошибке: # получено неожиданное сообщение: авторизация с (без аргументов) ИЛИ NameError: неопределенная локальная переменная или метод `

авторизации: настройка теста следующая (строка, помеченная * - да, еще одна глупая попытка - выдает ошибку):

context "user registers with given provider" do
  let(:user) {instance_double('User', name: 'test name', email: 'test@gmail.com')}
  let(:auth) {instance_double('Authorization', provider: "github", uid: "12345", user_id: 1)}
  it 'creates user record using auth hash' do
    allow(controller).to receive(:session?).and_return(false)
    allow(Authorization).to receive(:exists?).with(OmniAuth.config.mock_auth[:github]).and_return(false)
    allow(User).to receive(:exists?).with(OmniAuth.config.mock_auth[:github]['info']).and_return(false)
    expect(User).to receive(:create_with_omniauth).with(OmniAuth.config.mock_auth[:github] 
                                                                               ['info']).and_return(user)
    post :create, provider: :github
  end
  it 'creates authorization which belongs to user' do
    allow(controller).to receive(:session?).and_return(false)
    allow(Authorization).to receive(:exists?).with(OmniAuth.config.mock_auth[:github]).and_return(false)
    allow(User).to receive(:exists?).with(OmniAuth.config.mock_auth[:github]['info']).and_return(false)
    allow(User).to receive(:create_with_omniauth).with(OmniAuth.config.mock_auth[:github] 
                                                                               ['info']).and_return(user)
   *expect(user.authorizations).to 
                receive(:create_with_omniauth).with(OmniAuth.config.mock_auth[:github]).and_return(auth)*
    post :create, provider: :github
  end
end

Пожалуйста, помогите!

...