我有一个提示自动完成的方法。我正在使用Solr。
控制器中的方法如下:
def address_autocomplete
search = Sunspot.search(Address) do
fulltext params[:term]
with(:user_id, current_user.id)
end.results
render json: search.map(&:address_with_id_to_string).to_json
end
我正在为上述方法编写rspec。上述方法的测试如下所示:
require 'spec_helper'
describe AddressesController, type: :controller do
describe Address, search: true do
describe 'Search' do
before(:each) do
Sunspot.remove_all!
Sunspot.commit
end
let!(:address) do
create(:address,
name: 'Michael Jackson',
street: '100 spear st',
postal_code: '94105',
state_or_region: 'California',
phone_number: '123-456-7890',
city: 'San Francisco',
user: user).tap { |b| b.index! }
end
describe 'GET #address_autocomplete' do
let!(:user) { create :user }
it 'It prompts autocomplete of addresses' do
xhr :get, address_autocomplete_addresses_path , term: 'Mic'
debugger
ActiveSupport::JSON.decode(response.body).to eq(address.address_with_id_to_string)
//Check response is desired string or not
end
end
end
end
end
在上面的代码中,调试后我发现Sunspot无法在搜索数组中返回所需的响应。搜索数组为空白。我无法找到发生这种情况的原因。
答案 0 :(得分:0)
问题不在于solr。我在集成测试文件夹中编写测试。这给我带来了很多问题。由于在集成测试文件夹中找不到设备助手,因此我也无法使用sign_in user
。我将测试移到了单元测试中,现在它工作正常。