2015-10-20 4 views
1

Я пытаюсь написать тест для своего InvitationsController#Create.Как проверить наличие существующего пользователя в Rspec в Post # Create?

Это действие POST http.

В основном то, что должно случиться, когда post#create сначала выполняется, то первое, что нужно сделать, это нам нужно проверить, чтобы увидеть, если User существует в системе электронной почты передается в через params[:email] по Post запросу.

Мне нелегко обматывать голову, как я это делаю.

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

Это то, что у меня есть:

describe 'POST #create' do 
    context 'when invited user IS an existing user' do 
     before :each do 
      @users = [ 
      attributes_for(:user), 
      attributes_for(:user), 
      attributes_for(:user) 
      ] 
     end 

     it 'correctly finds User record of invited user' do 

      expect { 
      post :create, invitation: attributes_for(:member, email: @users.first.email) 
      }.to include(@users.first[:email]) 
     end 
    end 
end 

Это ошибка, я получаю:

1) Users::InvitationsController POST #create when invited user IS an existing user correctly finds User record of invited user 
    Failure/Error: expect { 
     You must pass an argument rather than a block to use the provided matcher (include "[email protected]"), or the matcher must implement `supports_block_expectations?`. 
    # ./spec/controllers/users/invitations_controller_spec.rb:17:in `block (4 levels) in <top (required)>' 

Я не удивлен ошибкой, потому что тест не чувствует себя хорошо для меня. Я просто не могу понять, как проверить это, не написав код в моем controller#action.

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

+0

Что такое действие 'create', которое предполагается сделать, когда будет найдено электронное письмо? Он возвращает сообщение в виде обычного текста? – nbermudezs

ответ

2

Ошибка, которую вы получаете, является синтаксической ошибкой, ничего не связано с тем, что должно делать ваше действие. Код, который у вас там есть, интерпретируется как вы передаете блок ({}) методу ожидания.

я бы изменить его на что-то вроде

it 'correctly finds User record of invited user' do 
    post :create, { email: @users.first[:email] } 
    expect(response).to include(@users.first[:email]) 
end 

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

отметить также, что я email непосредственно передается на почту, так как вы упомянули вы ожидали его в params[:email], но с помощью теста вы написали кажется, что вы ожидали его в params[:invitation][:email]. Измените эту часть, если это так.

+0

Ok так что теперь ошибка я получаю это: 'Сбой/Ошибка: сообщение: создание, {электронная почта: @ users.first.email} NoMethodError: не определен метод 'электронной почты' для # ' Идеи? – marcamillion

+0

А, мне плохо. Это должно быть '@ users.first [: email]' вместо '.email', не заметил, что это хэш. Изменит мой ответ. – nbermudezs

+0

Понял, что это так, но теперь я получаю это: 'NoMethodError: undefined method 'name' для nil: NilClass' и нет номера строки или чего-либо, что имеет значение. – marcamillion

 Смежные вопросы

  • Нет связанных вопросов^_^