2013-03-01 3 views
0

Новое для ruby ​​/ rspec и пытается проверить, что метод вызывает исключение. Возможно, я ошибаюсь.RSpec should_receive не достигает метода в классе

#require 'rspec' 

describe "TestClass" do 
    it "should raise exception when my method is called" do 
    test = Test.new 
    test.should_receive(:my_method).and_raise 
    end 
end 

class Test 
    def my_method 
    raise 
    end 
end 


rspec test.rb 
F 

Failures: 

    1) TestClass should raise exception when my method is called 
    Failure/Error: test.should_receive(:my_method).and_raise 
     (#<Test:0x007fc61c82f7c8>).my_method(any args) 
      expected: 1 time 
      received: 0 times 
    # ./test.rb:6:in `block (2 levels) in <top (required)>' 

Finished in 0.00061 seconds 
1 example, 1 failure 

Failed examples: 

rspec ./test.rb:4 # TestClass should raise exception when my method is called 

Почему сообщение получено нулевым временем?

ответ

1

Ваш тест неверен. Для того, чтобы проверить, что исключение сгенерировано вы хотите сделать это:

it "should raise exception when my method is called" do 
    test = Test.new 
    test.should_receive(:my_method) 

    expect { 
    test.my_method 
    }.to raise_error  
end 

И в этом случае вы, вероятно, не нужно добавлять should_receive. Выбрав my_method, вы убедитесь, что test получает этот метод. В основном вы издеваетесь, когда вам не нужно издеваться.

+0

Спасибо! Я видел, как ожидают ссылки в другом месте. Я полностью злоупотреблял should_receive. – sclarson

+0

@sparks yup! : D Я боролся в течение долгого времени с rspec, вы захотите использовать чит-лист для всех различных помощников, которые существуют: https://gist.github.com/steveclarke/2353100 –

0

Вы должны сделать что-то, чтобы вызвать этот метод. Если это обратный вызов here, это примеры их тестирования.

+0

Эта ссылка, вероятно, очень запутанна для тех, кто только начинает работать с ruby ​​/ rspec. –

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