Проверить (отсутствие) `puts` в RSpec
Я использую rspec для моего теста в проекте ruby, и я хочу указать, что моя программа не должна выводить ничего, когда используется опция -q. Я пробовал:
Kernel.should_not_receive :puts
Это не привело к неудачному тесту, когда на консоль был выход.
Как проверить отсутствие выходного текста?
Ответы
Ответ 1
puts использует $stdout внутренне. Благодаря тому, как это работает, самый простой способ проверить - просто использовать: $stdout.should_not_receive(:write)
Какие проверки ничего не записываются в stdout, как ожидалось.
Kernel.puts(как указано выше) приведет только к неудачному тесту, когда он
(например, Kernel.puts "Some text" ), где
как и большинство случаев, которые он вызывает в области текущего объекта.
Ответ 2
Принятый выше ответ неверен. Он "работает", потому что он не получает сообщение: write, но он мог бы получить сообщение: puts.
Правильная строка должна выглядеть следующим образом:
$stdout.should_not_receive(:puts)
Также вам нужно убедиться, что вы поместили строку до кода, который будет записываться в STDIO. Например:
it "should print a copyright message" do
$stdout.should_receive(:puts).with(/copyright/i)
app = ApplicationController.new(%w[project_name])
end
it "should not print an error message" do
$stdout.should_not_receive(:puts).with(/error/i)
app = ApplicationController.new(%w[project_name])
end
Это фактический рабочий RSpec из проекта