rspec rails: запрос базы данных модульных тестов - PullRequest
0 голосов
/ 08 мая 2018

У меня есть модель пользователя, запрос помощника и контроллер: помощник содержит метод, который возвращает список пользователей при отправке запроса поискового запроса из представления:

class UserQueryHelper

  def initialize( query = nil )
    @query = Arel.sql("UNACCENT('%#{ query }%')")
  end

  def search
    User.where( first_name.matches( @query ).or( last_name.matches( @query ) ))
  end

protected

  def users   ; User.arel_table   ; end

  def first_name
    Arel::Nodes::NamedFunction.new( "UNACCENT", [ users[ :first_name ] ] )
  end

  def last_name
    Arel::Nodes::NamedFunction.new( "UNACCENT", [ users[ :last_name ] ] )
  end

end

в модели, которую я называю этим помощником:

def self.search( query )
    if query.present?
      UserQueryHelper.new( query ).search
    else
      all
    end
end 

и в контроллере я получаю список пользователей, которых ищет администратор:

users_to_export = User.regular.search(params[:search]).includes( :company )

Я хочу написать какой-то модульный тест для этого, и у меня не было правильного способа сделать это, и я попробовал этот код, но он не работает:

  require 'spec_helper'

describe UserQueryHelper do

  let!( :query ) { UserQueryHelper.new( "sahnoun" ) }
  it "return user" do
    user1 = create :user, first_name: "sahnoun", last_name: "mabrouk", company: $company
    expect( query.send( :search ) ).to include user1

  end

end

1 Ответ

0 голосов
/ 08 мая 2018

Вы должны получить ошибку stack level too deep

let!( :query ) { UserQueryHelper.new( query ) }

выполняется как

UserQueryHelper.new( UserQueryHelper.new (UserQueryHelper.new (....)))

это должно быть определено как

let!( :query ) { UserQueryHelper.new( "<Your Test Query>" ) }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...