Я думаю, что я могу откусить больше, чем я могу пожевать, пытаясь узнать 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