Как проверить модель обратного вызова, которая работает только в производстве? - PullRequest
0 голосов
/ 10 февраля 2019

Я сознательно включил мой обратный вызов только при запуске:

after_create :send_slack_notification unless Rails.env.test?

def send_slack_notification
  SlackNotifier.send('test')
end

Теперь я хотел бы создать тест в RSpec.Есть ли способ изменить среду для этого конкретного теста?Очевидно, что следующее не работает: (

it "sends a slack notification after registration" do
  notifier = double(SlackNotifier)
  expect(notifier).to receive(:send)
  user_create
end

Добавлен класс SlackNotifier

class SlackNotifier
  URI = ENV['SLACK_WEBHOOK']
  CHANNEL = "#channel"
  USERNAME = "Bot"

  def self.message msg, uri: URI, channel: CHANNEL, username: USERNAME
    new(uri, channel:channel, username:username).message(msg)
  end

  def initialize uri = URI, channel: CHANNEL, username: USERNAME
    raise UriNotSetError unless uri
    @client ||= Slack::Notifier.new(uri, channel: channel , username: username)
  end

  def message msg
    @client.ping msg
  end

  class UriNotSetError < StandardError
    def message
      "The URI for the Slack Webhook was not properly configured, make sure you set ENV['SLACK_WEBHOOK']"
    end
  end

end

Ответы [ 2 ]

0 голосов
/ 11 февраля 2019

Это просто, не так ли?

it "sends a slack notification after registration" do
  allow(Rails.env).to receive(:test?).and_return(false)
  notifier = double(SlackNotifier)
  expect(notifier).to receive(:send)
  user_create
end

ОБНОВЛЕНИЕ: Вы должны исправить условия модели

after_create :send_slack_notification, unless: Proc.new { Rails.env.test? }

def send_slack_notification
  SlackNotifier.send('test')
end
0 голосов
/ 10 февраля 2019

Я думаю, что вместо проверки вашей среды Rails вы можете легче протестировать это поведение с помощью переменной среды.Вы можете сделать переменную окружения URL-адресом для своего веб-крючка Slack, а затем проверить наличие переменной как определение того, следует ли пытаться отправить.Когда он не определен, есть неоперативный.

thinkbot имеет хороший драгоценный камень для временного изменения переменной окружения для определенного теста с именем cli_control , который упрощает настройку этих типов тестов..

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