Rspec错误的参数个数(0表示1)

时间:2015-12-14 09:37:59

标签: ruby-on-rails rspec

我做了一个简单的测试,

it "should return list of invoices for a certain taxi driver" do
   taxi_driver=TaxidriverController.new();

   invoice=taxi_driver.getInvoices("T2")


   res=[{ passenger: "Salman", Origin:"Liivi 2, Tartu, Estonia",Destination:" Uus-Sadama 25, Tallinn, Estonia", Price:"1000"}]
                  expect(invoice).to eq(res) 

 end

在我的控制器中我有:

class TaxidriverController < ApplicationController
   def getInvoices( taxi_No )


      [{ passenger: "Salman", Origin:"Liivi 2, Tartu, Estonia",
                              Destination:" Uus-Sadama 25, Tallinn, Estonia", Price:"1000"}]


  end
end

如您所见,该方法未实现,我只是想确保我可以通过此返回类型传递测试。但我遇到了错误

 ArgumentError:
   wrong number of arguments (0 for 1)
 # ./app/controllers/taxidriver_controller.rb:15:in `getInvoices'

1 个答案:

答案 0 :(得分:0)

您不应直接调用控制器上的方法。

Rails控制器的公共API是响应HTTP请求的操作。其他一切都应该是私人方法。而且你不测试私有,因为它是一个实现细节。

您的控制器规格将测试您的控制器如何响应某个请求以及它给出的响应。您从不实例化控制器。

那么呢?

此功能听起来像属于模型层的东西。我们可以直接测试模型:

class TaxiDriver < ActiveRecord::Base
  # methods in ruby should be snake_case.
  def get_invoices
    # ...
  end
end
require 'rails_helper'
RSpec.describe TaxiDriver do
  let(:taxi_driver) { TaxiDriver.new } 
  describe '.get_invoices' do
    it "should return list of invoices for a certain taxi driver" do
      res = [{ passenger: "Salman", Origin:"Liivi 2, Tartu, Estonia",Destination:" Uus-Sadama 25, Tallinn, Estonia", Price:"1000"}]
      expect(taxi_driver.get_invoices("T2")).to eq(res)
    end
  end
end

不属于可以分解为零件并单独测试的模型中的任何其他内容属于帮助程序或服务对象。