2016-01-29 4 views
1

Моя цель - написать rspec-тест, который проверяет, был ли вызван метод.RSpec - проверить, был ли метод вызван

notify(result) if notification_allowed?(result) 

Оба уведомления_охватываются? и уведомления - частные методы. Точнее, мне нужен тест, проверяющий, был ли вызван метод уведомления. Я попытался сделать что-то вроде ниже, но это не кажется правильным.

subject { described_class.new } 

it do 
    expect(subject).to receive(:notify) 
    subject.send(:notification_allowed?, true) 
end 
+0

Просто отправив 'notification_allowed?' Не будет волшебно сделать условный проход. Вам нужно позвонить, что бы это ни называло 'annify'. –

+0

Не могли бы вы привести пример? – mike927

+0

Зачем вам нужно проверять частные методы? Методы тестирования, которые не отображаются в первую очередь, могут быть признаком неправильного подхода к проблеме. Можете ли вы поделиться больше кода и использования? –

ответ

2

Вызов notification_allowed? не делает ничего, кроме возвращения результата notification_allowed? Это не связано с notify

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

Например, метод может быть ...

def check_and_notify(result) 
    notify(result) if notification_allowed?(result) 
end 

так что тест будет ...

subject { described_class.new } 

it 'calls notify' do 
    expect(subject).to receive(:notify) 
    subject.send(:check_and_notify, true) 
end 
+0

не является другим способом не создавать новый метод? – mike927

+0

Да, вызовите метод, который уже имеет эту строку! – SteveTurczyn

+0

Я вижу сейчас! Спасибо! – mike927

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