Rspec을 사용하여 테스트 사례를 작성하는 방법을 배우고 있습니다. 나는 포스트가 많은 코멘트를 가질 수있는 간단한 포스트 비계를 가지고있다. Rspec을 사용하여 테스트하고 있습니다. Post :has_many :comments
을 확인하려면 어떻게해야합니까? 내가 Post.comments
메서드를 스터핑하고 코멘트 개체 배열의 mock 개체를 반환하여 이것을 확인해야합니까? AR 협회 테스트가 실제로 필요합니까?RSpec의 ActiveRecord 연결 확인
답변
ActiveRecord 연관은 Rails 테스트 스위트에서 잘 테스트되어야하며 대부분의 사람들은 작동 여부를 확인하지 않아도됩니다.
모델이 인 것을 확인하려는 경우 이러한 연관성을 사용하면 그 차이가 나올 수 있습니다. 테스트하고 싶지 않을 수도 있습니다. 나는 shoulda 보석을 사용하여 이것을하고 싶다. 그것은 당신이 다음과 같이 깔끔한 일을 수행 할 수 있습니다
describe Post do
it { should have_many(:comments).dependent(:destroy) }
end
대부분의 사람들은 연관을 테스트하지 않습니다. 레일스는 이미 해당 메소드가 올바르게 작동하는지 확인하기위한 단위 테스트를 이미 가지고 있기 때문입니다. proc 또는 무언가와 같이 복잡한 작업을 수행하는 경우 명시 적으로 테스트하고 싶을 수 있습니다. 대개 그냥 수행하면됩니다.
a = Post.new
a.comments << Comment.new
assert a.save
assert a.comments.size == 1
또는 이와 유사한 것입니다.
부분적으로 당신을 잡았습니다. 나는 새로운 테스트입니다.관련 게시물이 삭제 될 때 모든 주석이 삭제되는지 확인하기 위해 단위 테스트를 작성한다고 가정 해보십시오. 그럼 충분하니? 또한 나는 스 캐 폴딩으로 생성 된 파괴 방법을 검증하기 위해 단위 테스트를 작성해야합니다. –
시험 협회는 특히 TDD 매우 regarded- 다른 개발자들은 해당 코드를보고하기 전에 사양을 보일 것입니다 환경에서 일반적으로 좋습니다. 테스트 연관은 spec 파일이 코드를 가장 정확하게 반영하는지 확인합니다. 당신이 연결을 테스트 할 수 있습니다
두 가지 방법 : FactoryGirl와
:이 상대적으로 피상적 인 테스트가
expect { FactoryGirl.create(:post).comments }.to_not raise_error
입니다 것입니다, 공장 등으로 :
factory :post do title { "Top 10 Reasons why Antelope are Nosy Creatures" } end
반환 모델에
has_many
주석이 연결되어 있지 않으면 NoMethodError가 발생합니다.ActiveRecord #reflect_on_association 메서드를 사용하면 연관성에 대해보다 자세히 살펴볼 수 있습니다. 더 복잡한 관계로, 예를 들어 :
class Post has_many :comments, through: :user_comments, source: :commentary end
당신은 당신의 관계를보다 자세히 검토 할 수 있습니다 : 옵션이나 조건과 관련된
reflection = Post.reflect_on_association(:comment) reflection.macro.should eq :has_many reflection.options[:through].should eq :user_comments reflection.options[:source].should eq :commentary
및 테스트 무엇 이건.
당신이 아니라 당신의 연결을 테스트 할 shoulda 같은 외부 보석을 사용하지 않는 게 좋을 경우 (참조 Robert Speicher의 Answer 그에 대한 자세한 내용은), 또 다른 옵션은 관련 협회의 AssociationReflection
개체를 가져 reflect_on_association
을 사용하는 것입니다 다음 내용을 주장하십시오.
describe Post do
it "should destroy its comments when it is destroyed" do
association = Post.reflect_on_association(:comments)
expect(association).to_not be_nil
expect(association.options[:dependent]).to eq :destroy
end
end
- 1. ActiveRecord 모델의 복잡한 연결
- 2. ActiveRecord :: Schema 연결 전환
- 3. belongs_to의 Activerecord 연결 확장
- 4. ActiveRecord : 카운팅 연결
- 5. ActiveRecord - 자체 참조 연결
- 6. 캐슬 ActiveRecord 연결 오류 무시하기
- 7. ActiveRecord 개체 및 연결 캐싱
- 8. 레일 : ActiveRecord 연결 메서드 재정의
- 9. 루비. RSpec의 조롱
- 10. RSpec의 검색 경로에 추가하기
- 11. Rspec의 테스트 인수는 무엇입니까?
- 12. WCF 연결 확인
- 13. 인터넷 연결 확인
- 14. 저지에서 연결 확인
- 15. 활성 인터넷 연결 확인
- 16. MySQL 데이터베이스와의 연결 확인
- 17. winsock과의 연결 유효성 확인
- 18. SQLite는 아이폰 연결 확인
- 19. 네트워크 연결 확인 iPhone
- 20. LDAP 연결 확인 (자바)
- 21. Python의 로컬 연결 확인
- 22. wcf 클라이언트 연결 확인
- 23. 인터넷 연결 확인
- 24. Perl 소켓 연결 확인
- 25. Rails (3) 비 ActiveRecord 필드의 유효성 확인
- 26. 상위 속성에 의한 ActiveRecord 유효성 확인
- 27. ActiveRecord/Rails의 복수 열 외래 키/연결
- 28. Rails ActiveRecord : 연결 유효성 검사 건너 뛰기
- 29. HttpHandler의 SubSonic ActiveRecord (연결 문자열은 어디에 속합니까?)
- 30. ActiveRecord 연결 : 사용자 정의 초기화 프로그램
감사! 지금 아주 명확한 전망을 얻었다. –
Woops, 다시 확인하십시오. 나는 Shoulda 보석이 아니라 factory_girl을 의미했습니다. –