2012-08-12 3 views
3

Rspec으로 테스트하는 방법을 배우려고합니다. 하지만,Rspec으로 presence_and belongs_to를 테스트하십시오.

require 'spec_helper' 

describe Item do 
    it { should belong_to :list } 

    before(:each) do 
    @item = FactoryGirl.create(:item) 
    end 

    subject { @item } 

    it { should respond_to :name } 
    it { should validate_presence_of :name } 

end 

이것에 대해 몇 가지 질문이 있습니다 순간

나는 아이템 클래스의 스펙을 가지고있다.

it { should validate_presence_of :name } 작성과 동일합니다 :

describe "when name is not present" do 
    before { @item.name = "" } 
    it { should_not be_valid } 
end 

또는 둘 사이에 중요한 차이가있다?

it { should belong_to :list }이 사양에 맞게 작성해야하는지 또는 더 좋은 방법이 있는지 궁금합니다.

또한 @item = FactoryGirl.build(:item) 또는 FactoryGirl.create(:item)을 할 수 있음을 알고 있습니다. 생성은 테스트 DB에 항목을 저장하고 빌드하지 않습니까? 또는 나는 여기에서 혼란 스럽다. 어떤 것을 사용해야합니까?

감사합니다.

답변

7

나는 shoulda-matchers 또는 비슷한 것을 사용하고 있다고 생각합니다. 그들은 당신이 사용하는 것처럼 짧고 간결한 matchers를 제공한다는 장점이 있습니다. 대부분 같은 모양 내 수업이 따르기 때문에

it { should belong_to :list } 
it { should validate_presence_of :name } 

이 중요하다 :

누군가가 그 라인 중 하나를 변경하면
class Item 
    belongs_to :list 
    validate_presence_of :name 
end 

,이 표시됩니다

는 개인적으로 나는 다음 테스트를 믿는다 테스트에서.

그래서 imho는 실제로 스펙을 작성할 가치가 있으며 많은 작업도 아닙니다.

두 번째로 : 예, should validate_presence_of은 실제로 큰 양식과 유사하지만 더 짧은 양식은 훨씬 표현력이 좋습니다. 짧은 양식을 사용하십시오!

셋째 : FactoryGirl 차이 :

  • 사용 FactoryGirl.create 개체가 데이터베이스, 예를 들어, 존재해야하는 경우 컨트롤러가 항목을 검색 할 수 있는지 테스트하려고하기 때문입니다.
  • 개체가 필요한 경우에만 FactoryGirl.build을 사용하고 데이터베이스에 개체가 필요하지 않습니다. 데이터베이스에 개체를 저장하지 않으면 검사를 더 빨리 할 수 ​​있습니다.

희망이 도움이됩니다.

+0

감사합니다. 나는 정말로 shoulda-matchers를 사용하고 있습니다. 나는 짧은 형식을 사용할 것이다! :) – cabaret

관련 문제