2014-02-01 2 views
0

У меня есть метод адреса, который создает новый класс и возвращает некоторую информацию.Тестирование метода с помощью метода should_receive с помощью rspec

class Office 
    attribute :id 
    def address 
    info = Services::Employee.new 
    info.contact = [contact] 
    info.id = id 

    info 
    end 
end 

В настоящее время в приведенном выше адреса метода контакта (один внутри массива) еще один метод, который возвращает кучу вещей.

Теперь в моем тесте rspec я просто хочу сказать, что info.contact возвращает [контакт] без фактического тестирования его данными. Я читал о should_receive, но я не уверен, как протестировать вышеописанный метод, используя should_receive.

Вот что я пробовал:

info = Employee.deserialize(JSON.parse(info.to_json)) 
it 'returns info' do 
    Employee.should_receive(:info.contact).and_return('[contact]') 
    expect(helper.address).to eq(info) 
end 

Я получил эту ошибку:

expected: 1 time with any arguments 
    received: 0 times with any arguments 

ответ

0

Это выглядит как info является экземпляром Employee в тесте. Поэтому это Employee, который получает сообщение contact.

Попробуйте изменить ваш тест, так что should_receive помещается на Employee непосредственно:

Employee.any_instance.should_receive(:contact).and_return('[contact]') 
+0

'contact' вызывается как метод экземпляра, но вы предлагаете установки ожидание на метод класса , –

+0

Мой плохой - исправил его сейчас. – Jon

0
Services::Employee,.any_instance.should_receive(:contact=) {|value| 
    value.should eq <expected_value> 
    <expected_value> 
} 
Смежные вопросы