Тестирование работы в Dashing - PullRequest
0 голосов
/ 08 июня 2018

Я сейчас создаю приложение с Dashing / Smashing и использую rspec для проверки своего кода.Однако я не могу понять, как проверить, что send_event вызывается.Я пробовал

expect(Sinatra::Application).to receive(:send_event).twice

и

expect(Dashing).to receive(:send_event).twice,

, но ни один не помог.Я не уверен, какой объект должен получить вызов send_event, поскольку он находится внутри Dashing в app.rb.Существует также эта проблема , в которой говорится об одном и том же, без ответа на Dashing GitHub.

Любой совет о том, как это сделать, будет высоко оценен.Спасибо!

Обновление:

Я до сих пор не понял, как это сделать, но обнаружил, что это работает:

let(:dummy_class) { Class.new { include Dashing } }

context 'something' do
    it 'does something' do
        expect(dummy_class).to receive(:send_event).once
        dummy_class.send('send_event', 'test', current: 'test')
    end
end

Однако если я использую метод, который хочу вызвать, который содержит send_event, а не dummy_class.send(...), то он не распознает, что метод был вызван.Это должно быть связано с тем, что мой тест не использует фиктивный класс.Я не знаю, есть ли способ обойти это и заставить его использовать фиктивный класс.

1 Ответ

0 голосов
/ 08 июня 2018

Я разобрался!

Не звоните send_event прямо на работе.Назовите его в каком-то другом классе, возможно, под названием EventSender.Затем, чтобы проверить, что вызывается send_event, обработайте его так, как если бы он был методом экземпляра этого класса, а не методом модуля.Ваш код может выглядеть так, например:

describe 'something' do
    context 'something' do
        it 'does something' do
            happy_es = EventSender.new(...)
            expect(happy_es).to receive(:send_event).with(...)
            happy_es.method_that_calls_sendevent
        end
    end
end

Надеюсь, это поможет кому-то, кто борется с тем же.:)

...