2010-11-29 2 views
1

Я думаю, что я могу откусить больше, чем я могу пожевать, пытаясь узнать RSpec сам по себе ... не существует какой-либо полной документации по RSpec 2?!? по крайней мере, нет, что мне удалось найти ...Общие сведения о спецификациях RSpec 2

Во всяком случае, я, в слабой попытке интегрировать RSpec, начал изучать 29 спецификаций, созданных генератором эшафотов в Rails 3. Некоторые из них я понимаю, но многое еще убегает. Надеюсь, кто-то может помочь (или указать мне на приличную документацию RSpec 2).

Например, в первом блоке кода ниже (def mock_clown...) Я могу предположить, что mock_clown создает макет моего класса Clown для тестирования. Но что именно происходит? что порождает этот «макет»? что означает .as_null_object и .tap? Это очень сбивает с толку, поскольку я не могу найти пример, чтобы сравнить этот блок в любые документы или учебные пособия я сталкивался ...

#clowns_controller_spec.rb 

require 'spec_helper' 

describe ClownsController do 

    def mock_clown(stubs={}) 
    (@mock_clown ||= mock_model(Clown).as_null_object).tap do |clown| 
     clown.stub(stubs) unless stubs.empty? 
    end 
    end 

    describe "GET index" do 
    it "assigns all clowns as @clowns" do 
     Clown.stub(:all) { [mock_clown] } 
     get :index 
     assigns(:clowns).should eq([mock_clown]) 
    end 
    end 

... 


    describe "POST create" do 

... 


    describe "with invalid params" do 
     it "assigns a newly created but unsaved clown as @clown" do 
     Clown.stub(:new).with({'these' => 'params'}) { mock_clown(:save => false) } 
     post :create, :clown => {'these' => 'params'} 
     assigns(:clown).should be(mock_clown) 
     end 

     it "re-renders the 'new' template" do 
     Clown.stub(:new) { mock_clown(:save => false) } 
     post :create, :clown => {} 
     response.should render_template("new") 
     end 
    end 

... 

end 

ответ

4

Лучший источник документации для RSpec, вероятно, его GitHub вики. Вот общая ссылка на все драгоценные камни: https://github.com/rspec/rspec/wiki. Кроме того, проверьте rdoc, linked to here.

Что касается конкретных ответов, as_null_object заставляет макет записывать и игнорировать все вызовы методов. (Это замечательно, так как вам не нужно описывать каждый метод на объекте, только те, о которых вы заботитесь.)

Tap - это функция Ruby 1.9. Из документации at this link:

Объект # водопроводная

Передает объект блока и возвращает его (предполагается использовать для построения цепочки вызовов).

Для обучения RSpec 2 Webrat и Огурцы по своему усмотрению, я определенно рекомендую проверить the RSpec Book. Удивительный ресурс, и охватывает все аспекты.