2016-06-29 6 views
0

У меня есть следующий ROR RSpec тест:Понимание ActiveRecord :: Отношения с примером RSpec

Имейте в виду, что тест не пройдет, как в приведенном ниже коде. Метод правильно определен и делает то, что предназначено. Вопрос в том, почему, когда я изменяю и удаляю [] вокруг @public_topic во втором примере, тест терпит неудачу?

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 

обновление

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

Каков ваш 'метод visible_to' должен вернуться. Из вашего теста кажется, что он должен возвращать массив с чем-то в нем. Следовательно, когда вы вынимаете '[]', возвращая объект, он терпит неудачу. –

ответ

1

Трудно сказать, не видя реализации visible_to.

Из первого примера, похоже, этот метод возвращает объект ActiveRecord::Relation. Это будет представлять собой совокупность объектов, а не один объект.

Так, в сущности, сводится к тому:

object != [object] 
+0

Даже если его единственный объект внутри коллекции не считается единственным объектом? – davefogo

+1

Nope. Подумайте об этом так: гараж с одним автомобилем внутри него не эквивалентен одному автомобилю. – Jonathan

+0

Отличная аналогия! спасибо за то, что – davefogo

Смежные вопросы