Как проверить, что закрытый метод вызывается с помощью rspec - PullRequest
0 голосов
/ 05 февраля 2019

Я пытаюсь убедиться, что данный метод вызывается при вызове с помощью обратного вызова.По сути, у меня есть модель RiskMatrix, которая вызывает 2 приватных метода для обратного вызова after_save Поэтому я пытаюсь проверить, что эти методы правильно вызваны.

большое спасибо за вашу помощь

class RiskMatrix < ActiveRecord::Base
   after_save :alert_admin, :save_suspicious_ip, if: proc {score.length >= ALERT_THRESHOLD}

    private
    def alert_admin
        [...]
    end

    def save_suspicious_ip
        [...]
    end
end

risk_matrix_spec.rb

 describe 'after_save' do
  context 'score.length > ALERT_THRESHOLD' do
    it 'should run alert_admin' do
      matrix = build(:risk_matrix, score: 'ABCD')
      expect(matrix).to receive(:alert_admin)
    end

    it 'should run save_suspicious_ip' do
      matrix = create(:risk_matrix, score: 'ABCD')
      expect(matrix).to receive(:save_suspicious_ip)
    end

  end
end

оба теста не пройдены

 (#<RiskMatrix id: 3201, score: "ABCD", user_id: 3115, created_at: "2019-02-05 16:27:01", updated_at: "2019-02-05 16:27:01">).alert_admin(*(any args))
    expected: 1 time with any arguments
    received: 0 times with any arguments

    (#<RiskMatrix id: nil, score: "ABCD", user_id: nil, created_at: nil, updated_at: nil>).save_suspicious_ip(*(any args))
    expected: 1 time with any arguments
    received: 0 times with any arguments

Ответы [ 2 ]

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

Возможно, я что-то упускаю, но я не вижу вызовов сохранения, вы пробовали:

it 'should run alert_admin' do
  matrix = build(:risk_matrix, score: 'ABCD')
  allow(matrix).to receive(:alert_admin)
  matrix.save!
  expect(matrix).to have_received(:alert_admin).once
end

Перед сохранением вы даете RSpec знать, что заглушите этот метод, после сохранения вы проверяете методбыл назван.

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

Вы можете использовать shoulda-callback-matchers для проверки ваших обратных вызовов

it { is_expected.to callback(:alert_admin).after(:save) }

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

let(:matrix) { create(:risk_matrix, score: 'ABCD') }
context "when score.length > ALERT_THRESHOLD" do
  it "after create a matrix" do
   expect(matrix.suspicious_ip).to_not be_nil
  end
end
context "when score.length < ALERT_THRESHOLD" do
  it "after create a matrix" do
   expect(matrix.suspicious_ip).to be_nil
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...