我有以下ROR 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 :(得分:1)
如果没有看到visible_to
的实施,很难说。
从第一个示例开始,看起来该方法返回一个ActiveRecord::Relation
对象。这将代表一组对象,而不是一个对象。
所以,从本质上讲,它归结为:
object != [object]