проверка на (отсутствие) `ставит` в RSpec - PullRequest
10 голосов
/ 10 октября 2009

Я использую rspec для своего теста в проекте ruby ​​и хочу указать, что моя программа не должна ничего выводить, когда используется опция -q. Я попробовал:

Kernel.should_not_receive :puts

Это не привело к неудачному тесту при выводе на консоль.

Как проверить отсутствие текстового вывода?

Ответы [ 2 ]

15 голосов
/ 10 октября 2009

Put использует $ stdout для внутреннего использования. Из-за того, как это работает, самый простой способ проверить это просто использовать: $stdout.should_not_receive(:write)

Который проверяет, ничего не записано на стандартный вывод, как ожидалось. Kernel.puts (как указано выше) приведет только к неудачному тесту, когда он явно вызывается как таковой (например, Kernel.puts "Some text"), где в большинстве случаев это вызов в области видимости текущего объекта.

4 голосов
/ 01 ноября 2010

Принятый ответ выше неверен. Он «работает», потому что не получает сообщение: write, но, возможно, получил сообщение: put.

Правильная строка должна выглядеть следующим образом:

$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 из проекта

...