Rails 3 - Mock / Stub - 测试控制器

时间:2011-10-15 17:04:22

标签: ruby-on-rails testing rspec

我有一个关于测试以下Rails代码行的问题:

https://gist.github.com/1289849

在我的测试代码中我有类似的东西(显然不起作用):

https://gist.github.com/1289848

有人可以帮我为此编写正确的测试代码吗?

由于

1 个答案:

答案 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方法并返回一组模拟,使其更容易测试。