【问题标题】:RSpec & Tire gem: test for Tire::Results::CollectionRSpec & Tire gem: 测试 Tire::Results::Collection
【发布时间】:2012-09-11 20:39:40
【问题描述】:

尝试理解围绕轮胎 gem 进行测试的语法。

此控制器规范(默认来自脚手架模板)失败

  describe "GET index" do
    it "assigns all reports as @reports" do
      report = Report.create! valid_attributes
      get :index, {}, valid_session
      assigns(:reports).should eq([report])
    end
  end

因为

 Failure/Error: assigns(:reports).should eq([report])
 TypeError:
   can't convert Tire::Results::Collection to Array (Tire::Results::Collection#to_ary gives Tire::Results::Collection)

如何编写规范以使其期望一个轮胎 result 集合而不是活动记录对象数组?或者,有没有更好的方法来解决这个问题?

FWIW-

class ReportsController < ApplicationController  
  def index
    @reports = Report.search(params)
  end

  ...

和模型:

class Report < ActiveRecord::Base
  include Tire::Model::Search
  include Tire::Model::Callbacks
  ...
  def self.search(params)
    tire.search(load: true) do
      query { string params[:query] } if params[:query].present?
    end
  end
  ...

【问题讨论】:

    标签: ruby-on-rails rspec rspec-rails tire


    【解决方案1】:

    我意识到这是一个非常晚的答案,但是,嘿,来吧。

    Rspec 正在进行直接比较。它有一个集合,并试图将它与数组进行比较。但是,Tire 将强制转换定义为数组实际上并不返回数组(为什么,我不确定,这听起来对我来说很烦人!)

    鉴于您不打算比较数组,因此我快速浏览了 Collection 的来源:https://github.com/karmi/tire/blob/master/lib/tire/results/collection.rb

    好吧,我们没有有用的 to_ary ......但我们确实有一个 each,并且包含 Enumerable。这意味着我们基本上拥有数组可用的所有内容。

    那么,鉴于此,我们实际上想在这里做什么?我们想检查@report 在@reports 中是否可用。好吧,我们有可枚举的,并且快速检查期望源(https://github.com/rspec/rspec-expectations/blob/master/lib/rspec/matchers/built_in/include.rb#L38)说包含将映射到包含?在一个数组对象上。

    因此,简而言之,尝试将您的测试更改为:

    describe "GET index" do
      it "assigns all reports as @reports" do
       report = Report.create! valid_attributes
       get :index, {}, valid_session
       assigns(:reports).should include(report)
      end
    end
    

    【讨论】:

    • 迟到总比不到好!好答案!谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-20
    • 2012-05-07
    • 1970-01-01
    • 2012-06-10
    • 2012-04-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多