Итак, expect
перед send
- это способ проверить, будет ли тестируемый метод «запускать» или выполнять дополнительные операции, это способ сказать «когда я выполняю foo, я ожидаю, что» это " получилось". Есть способ обойти это, например:
subject.send
expect(logger).to have_received(:warn).with('foo')
Но я думаю, что этот способ новее, чем тот, который я предложил, я просто привык использовать предложенный.
Что касается насмешек и заглушек, то да, вы их не тестируете, потому что эти объекты выходят за рамки класса, на котором вы тестируете. Таким образом, Logger
должен иметь свой собственный набор тестов, такой же, как для HTTParty
, поэтому вы «имитируете» их поведение, чтобы протестировать свой класс, таким образом вы удалите зависимость между тестом и другими библиотеками ( или классы). Когда ваш модульный тест завершен, вы можете перейти к интеграционному тесту и проверить (извините за избыточность), что весь стек (или конечная точка, или контроллер, или «поток») выполняет то, что вы ожидаете.