2016-06-29 3 views
0

와 나는 다음과 같은 ROR RSpec에 테스트가 있습니다. 이 방법은 올바르게 정의되고 의도 된대로 수행됩니다. 문제는 두 번째 예제에서 @public_topic 주변의 []을 수정하고 제거 할 때 테스트가 실패하는 이유입니다.이해 액티브 :: 관계는 RSpec에 예

describe "scopes" do 
    before do 
     @public_topic = Topic.create!(name: RandomData.random_sentence, description: RandomData.random_paragraph) 
     @private_topic = Topic.create!(name: RandomData.random_sentence, description: RandomData.random_paragraph, public: false) 
    end 

    describe "visible_to(user)" do 
     it "returns all topics if user is present" do 
      user = User.new 
      expect(Topic.visible_to(user)).to eq(Topic.all) 
     end 
     it "returns only public topics if user is nil" do 
     expect(Topic.visible_to(nil)).to eq([@public_topic]) 
     end 
    end 
    end 

visible_to의 구현을 보지 않고 말을하기 어렵다

scope :visible_to, -> { where(public: true) } 
+0

반환하기로하여'visible_to' 방법은 무엇입니까 :

그래서, 본질적으로, 그것은 아래에 온다. 테스트에서 뭔가있는 배열을 반환 해야하는 것처럼 보입니다. 그러므로'[]'를 꺼내 객체를 반환하면 실패합니다. –

답변

1

업데이트합니다.

첫 번째 예제에서이 메서드는 ActiveRecord::Relation 개체를 반환합니다. 이것은 하나의 객체가 아니라 객체의 집합을 나타냅니다.

object != [object] 
+0

컬렉션 내부의 단일 객체 인 경우에도 단일 객체로 간주되지 않습니까? – davefogo

+1

아니요. 그것 같이 생각하십시오 : 그것의 내부에 단일 차가있는 주차 차고는 단일 차와 동일하지 않습니다. – Jonathan

+0

좋은 비유! 덕분에 그 – davefogo