2013-09-16 4 views
0

я читал этот блог:Rails Тестирование, несколько тестов

http://clarkware.com/blog/2007/09/08/how-would-you-test-this

и увидел этот код в конце:

describe MenuItemsController, 'Creating a new menu item' do 

    before do 
    @attributes = {'name' => "Enchilada", 'price' => 4.99} 
    @menu_item = mock_model(MenuItem) 
    MenuItem.should_receive(:new).with(@attributes).once. 
     and_return(@menu_item) 
    end 

    it 'should redirect to index with a notice on successful save' do 
    @menu_item.should_receive(:save).with().once.and_return(true) 

    post :create, :menu_item => @attributes 

    assigns[:menu_item].should be(@menu_item) 
    flash[:notice].should_not be(nil)  
    response.should redirect_to(menu_items_url) 
    end 

    it 'should re-render new template on failed save' do 
    @menu_item.should_receive(:save).with().once.and_return(false) 

    post :create, :menu_item => @attributes 

    assigns[:menu_item].should be(@menu_item) 
    flash[:notice].should be(nil)  
    response.should be_success 
    response.should render_template('new') 
    end 

end 

Я был под впечатлением, что лучше поставить каждый тест (должен, утверждать, ожидать) в своем собственном блоке «он». Этот код содержит несколько.

Да, это делает код более легким для чтения, но если, например, строка: flash[:notice].should_not be(nil) не удалось, ваши результаты не будут указывать непосредственно на этот тест, не так ли?

Какова рекомендация здесь? Каждый тест индивидуально или связывает некоторые, чтобы помочь в удобочитаемости?

Нил

ответ

0

В целом лучший способ ставится только одно утверждение за описание теста, но он по-прежнему в дискуссии, как показано здесь: http://betterspecs.org/#single

В некоторых случаях я согласен, что многие expect s в то же самое тест может быть полезен, но, например, если первый expect терпит неудачу, то rspec прекратит выполнение этого теста и просто скажет, что это не удалось.

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