я читал этот блог: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)
не удалось, ваши результаты не будут указывать непосредственно на этот тест, не так ли?
Какова рекомендация здесь? Каждый тест индивидуально или связывает некоторые, чтобы помочь в удобочитаемости?
Нил