Rails 3 - Mock / Stub - Контроллер тестирования - PullRequest
1 голос
/ 15 октября 2011

У меня есть вопрос о тестировании следующей строки кода Rails:

https://gist.github.com/1289849

в моем тестовом коде у меня есть что-то вроде этого (очевидно, не работает):

https://gist.github.com/1289848

Кто-нибудь может помочь мне написать правильный тестовый код для этого?

Спасибо

1 Ответ

2 голосов
/ 15 октября 2011

Чтобы упростить тестирование, вы должны переместить эту логику в метод класса в вашей модели клиента. Я также предполагаю, что у вас есть 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 и вернуть коллекцию макетов, упрощая тестирование.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...