RSpec을 직접 배우려고 노력하는 것보다 더 많이 물어 뜯고 있다고 생각합니다 ... RSpec 2에 대한 완전한 설명서가없는 것 같습니다. 적어도 내가 발견 할 수 있었던 아무도 ...RSpec 2의 생성 된 사양 이해
어쨌든, 나는 RSpec을 통합하려는 미약 한 시도에서, 레일즈 3의 스캐 폴드 제너레이터에 의해 만들어진 29 개의 스펙을 검토하여 시작했다. 나를 도망칩니다. 누군가가 도움을 줄 수 있다면 (또는 적절한 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