我有一个关于测试以下Rails代码行的问题:
https://gist.github.com/1289849
在我的测试代码中我有类似的东西(显然不起作用):
https://gist.github.com/1289848
有人可以帮我为此编写正确的测试代码吗?
由于
答案 0 :(得分:2)
为了使测试更容易,您应该将此逻辑移动到客户端模型上的类方法。我还假设您的用户模型上有has_many :clients
,这就是您的查询所暗示的内容。
类似的东西:
class Client
def self.search_by_name(name)
all.where("name LIKE %?%", name).order("name ASC")
end
end
然后在你的控制器中:
@clients = current_user.clients.search_by_name(params[:search])
这将允许您在单元测试中进行测试,而不是使用集成测试。
client_spec.rb:
describe Client, 'searching by name' do
let(:current_user) { User.create!(...) }
let!(:client) { Client.create!(:name => 'client name', :user => current_user) }
it 'should find the clients by name' do
Client.search_by_name('client name').should include(client)
end
end
然后,您的集成测试可以存根search_by_name
方法并返回一组模拟,使其更容易测试。