Новый ответ для покрытия ожидаемого синтаксиса Rspec 3.
Тестирование выхода
Просто для проверки того, что вы действительно хотите (т.е. вы не проверяете исключение или ответ значения), что было выведено в STDOUT.
Когда condition
ложно
it "has a false condition" do
# NOTE: Set up your condition's parameters to make it false
expect {
begin cli_method
rescue SystemExit
end
}.to output("GTFO").to_stdout # or .to_stderr
end
Когда condition
истинно
it "has a true condition" do
# NOTE: Set up your condition's parameters to make it true
expect {
begin cli_method
rescue SystemExit
end
}.to output("Everything's okay!").to_stdout
end
Обратите внимание, что output("String").to_...
может принять Regex
например.
output(/^Everything's okay!$/).to_stdout
Может также захватывать с stderr
например.
output("GTFO").to_stderr
(что лучше для отправки, например, для ОП).
Тестирование выхода
Вы можете отдельно проверить, что ложное условие также повышает SystemExit
it "exits when condition is false" do
# NOTE: Set up your condition's parameters to make it false
expect{cli_method}.to raise_error SystemExit
end
it "doesn't exit when condition is true" do
# NOTE: Set up your condition's parameters to make it true
expect{cli_method}.not_to raise_error SystemExit
end