【发布时间】:2018-05-08 09:15:25
【问题描述】:
我有用户模型、查询助手和控制器:助手包含一个方法,当从视图发送搜索查询请求时返回用户列表:
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
【问题讨论】:
-
你测试的是search方法还是initialize方法?你不应该对每个人进行单独的测试吗?
标签: ruby-on-rails ruby unit-testing rspec