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