2015-04-26 4 views
4

Я пытаюсь проверить правильность правильности ошибки при определенных условиях. В этой спецификации ошибка возникает, но тест все еще не выполняется. Что я делаю не так?RSpec: ожидающий метод для повышения ошибки не работает

require 'spec_helper' 

describe USBTeensyRenderer do 
    context 'when the correct USB port name is not present' do 
    it 'raises an error on instantiation' do 
     expect(renderer = USBTeensyRenderer.new).to raise_error(USBInitError) 
    end 
    end 
end 

И выходной разъем «расслоении ехес RSpec»:

Failures: 

    1) USBTeensyRenderer when the correct USB port name is not present raises an error on instantiation 
    Failure/Error: expect(renderer = USBTeensyRenderer.new).to raise_error(USBInitError) 
    USBInitError: 
     USB output couldn't be initialized 
    # ./lib/ivan/view/renderers/usb_teensy_renderer.rb:9:in `rescue in initialize' 
    # ./lib/ivan/view/renderers/usb_teensy_renderer.rb:6:in `initialize' 
    # ./spec/models/usb_teensy_renderer_spec.rb:10:in `new' 
    # ./spec/models/usb_teensy_renderer_spec.rb:10:in `block (3 levels) in <top (required)>' 

Finished in 0.00351 seconds (files took 0.11638 seconds to load) 
8 examples, 1 failure 

Failed examples: 

rspec ./spec/models/usb_teensy_renderer_spec.rb:9 # USBTeensyRenderer when the correct USB port name is not present raises an error on instantiation 

Вот как возникает ошибка в классе:

def initialize 
    begin 
    @sp = SerialPort.new("/dev/tty.usbmodem54121", 9600, 8, 1) 
    rescue 
    raise USBInitError, "USB output couldn't be initialized" 
    end 
    @sp.get_modem_params() 
end 
+0

как вы поднимаете Ошибка в вашей тестируемой системе? – GolfWolf

+0

Обновлен с помощью метода инициализации класса USBTeensyRenderer. –

ответ

12

Я считаю, что ожидать следует принимать блок в этот случай:

expect { renderer = USBTeensyRenderer.new }.to raise_error(USBInitError)

Этот поток имеет довольно хорошее объяснение о ожидать против() {} ожидать

Rspec: expect vs expect with block - what's the difference?

+1

Правильно, потому что определение его в блоке позволит методу ожидания вызвать его, когда нужно, а не раньше. Благодаря! –

Смежные вопросы