2013-12-06 3 views
2

У меня есть метод, который иногда вызывает exit(numeric_value).Как проверить значение выхода в rspec?

Возможно ли, чтобы rspec подтвердил, что при вызове метода процесс выходит с правильным значением?

Я видел эти другие сообщения, но они не отвечают на этот конкретный вопрос.

+0

Вы должны были бы гасит 'exit' , или ваша программа на самом деле * выход *, когда эта линия встречается. Вы действительно не должны просто спасаться таким образом. Вместо этого создайте исключение. – meagar

+0

@meagar Сценарий ruby, который я хочу протестировать с помощью rspec, используется в контексте внешней среды (Sensu), которая проверяет значение выхода и действует соответствующим образом. Поэтому в этом случае требуется вызов 'exit'. –

+2

Ах, я не понимал, что 'exit' в Ruby на самом деле * делает * поднимает Exception. Ваш вопрос является дубликатом первой ссылки, которую вы опубликовали, и ответ будет хорошо работать для вас. Просто перехватите исключение 'SystemExit'. 'lambda {whatever} .should raise_error SystemExit', или просто поймайте исключение SystemExit' самостоятельно, чтобы проверить' .status' пойманного исключения. ' – meagar

ответ

7

Данный пример код рубин:

def it_will_exit 
    puts "before exit" 
    exit(false) 
    puts "never get here" 
end 

RSpec тест может быть:

it "it must exit" do 
    expect { it_will_exit }.raise_exception(SystemExit) 
end 

it "the exit value should be false" do 
    begin 
    it_will_exit 
    rescue SystemExit=>e 
    expect(e.status).to eq(1) 
    end 
end 
Смежные вопросы