Тестирование модели обратного вызова без стрельбы по электронной почте - PullRequest
0 голосов
/ 02 июля 2019

У меня есть приложение Rails 5, и я тестирую обратный вызов в моей модели.Я хочу быть уверенным, что вызывается обратный вызов, но я не хочу фактически запускать следующую строку, поскольку он вызывает API и отправляет электронное письмо:

response = bird.request(body, employee.location.birdeye)

Мой тест выглядит следующим образом:

it 'expects to send request through birdeye if valid' do
    req = build(:review_request)
    expect(req).to receive(:send_request)
    req.save
end

И это работает, но указанная выше строка запускается.Как я могу проверить этот обратный вызов, не вызывая bird.request()?Вот моя модель:

class ReviewRequest < ApplicationRecord
  belongs_to :user
  belongs_to :review, optional: true
  belongs_to :employee, optional: true

  after_create :send_request

  def client
    self.user.client
  end

  def send_request
    p "send_request callback..."
    ap self
    ap client
    body = {
        name: client.try(:name),
        emailId: user.email,
        phone: client.try(:phone),
        employees: [
            {
                emailId: employee.try(:email)
            }
        ]
    }

    bird = Birdeye.new
    response = bird.request(body, employee.location.birdeye)

    ap body
    return response
  end
end

1 Ответ

1 голос
/ 07 июля 2019

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


before do
  allow_any_instance_of(ReviewRequest).to receive(:send_request).and_return(true)
end

it 'expects to call :send request after creating a ReviewRequest' do
    allow_any_instance_of(ReviewRequest).to receive(:send_request)
    create(:review_request)
end

Если вы хотите проверить реализацию send_request, тогда заглушка Birdeye

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...