Ruby rspec存根记录查询

Ruby rspec存根记录查询,ruby,rspec,stub,Ruby,Rspec,Stub,我正在尝试存根查询的结果以检索一些记录。以下是查询: ouid = OrganizationalUnit.where("billing_id = ? AND status = 'active'", data[:billing_id]).select(:id) user_id = User.where("group_id in (14,17) AND organizational_unit_id in (?) AND status = 'active'", ouid).select(:id).fi

我正在尝试存根查询的结果以检索一些记录。以下是查询:

ouid = OrganizationalUnit.where("billing_id = ? AND status = 'active'", data[:billing_id]).select(:id)
user_id = User.where("group_id in (14,17) AND organizational_unit_id in (?) AND status = 'active'", ouid).select(:id).first
我正试图用以下内容将其存根:

    ou_value = double'fake ou',{ 'id' => '654321' }
    select_double = double 'fake select', {'select' => [ou_value]}
    OrganizationalUnit.stub( :where).and_return(select_double)
这不管用。我对用户表的查询如下所示:

SELECT id FROM `users` WHERE (group_id in (14,17) AND organizational_unit_id in ('--- !ruby/object:RSpec::Mocks::Mock\n__null_object: false\nname: fake ou\noptions:\n :__declared_as: Double\n') AND status = 'active') LIMIT 1
SELECT id FROM `users` WHERE (group_id in (14,17) AND organizational_unit_id in (654321) AND status = 'active') LIMIT 1
应该是这样的:

SELECT id FROM `users` WHERE (group_id in (14,17) AND organizational_unit_id in ('--- !ruby/object:RSpec::Mocks::Mock\n__null_object: false\nname: fake ou\noptions:\n :__declared_as: Double\n') AND status = 'active') LIMIT 1
SELECT id FROM `users` WHERE (group_id in (14,17) AND organizational_unit_id in (654321) AND status = 'active') LIMIT 1
我做错了什么


谢谢

,因此您想存根此查询:

OrganizationalUnit.where("billing_id = ? AND status = 'active'", data[:billing_id]).select(:id)
我想这应该是

OrganizationalUnit.stub_chain(:where, :select).and_return(654321)
另一件事:在模型的方法或范围内移动查找器总是一个好主意。通过这样做,更容易存根或模拟用于测试的内容