Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails ArgumentError:使用继承初始化时参数数目错误(0代表2)_Ruby On Rails_Ruby_Inheritance_Rspec - Fatal编程技术网

Ruby on rails ArgumentError:使用继承初始化时参数数目错误(0代表2)

Ruby on rails ArgumentError:使用继承初始化时参数数目错误(0代表2),ruby-on-rails,ruby,inheritance,rspec,Ruby On Rails,Ruby,Inheritance,Rspec,好, 这让我快发疯了,因为我不理解这个案例中的错误。 我定义了以下类: module Admins class BasePresenter < ::BasePresenter def render_customer(id:) return I18n.t('admin.admin') if id.nil? ::Customer.where(id: id).first.try(:name) || I18n.t('admin.deleted') end

好,

这让我快发疯了,因为我不理解这个案例中的错误。 我定义了以下类:

module Admins
  class BasePresenter < ::BasePresenter
    def render_customer(id:)
      return I18n.t('admin.admin') if id.nil?
      ::Customer.where(id: id).first.try(:name) || I18n.t('admin.deleted')
    end

    def percent_of(count, total)
      ((count.to_f / total.to_f) * 100.0).to_i
    end
  end
end
但是,当我尝试运行我的规范时,我从RSpec收到以下错误:

ArgumentError:参数数目错误(0表示2) ./app/presenters/base_presenter.rb:3:in
initialize'
./spec/presenters/admins/base\u presenter\u spec.rb:24:in
块(3 级别)在'

该类与其他呈现没有什么不同,在其他呈现中,继承以完全相同的方式工作,并且这些测试正在通过。 仅此类的测试因此错误而失败,并且仅在测试方法
的百分比时失败

我没有看到什么

编辑

这是我的RSpec测试:

require 'spec_helper'

describe ::Admins::BasePresenter do
  describe '#render_customer' do

    let(:customer) { Customer.first }
    subject { ::Admins::BasePresenter.new(Object.new, ApplicationController.new.view_context) }

    it 'returns the I18n translations for (admin) when no customer is set.' do
      expect(subject.render_customer(id: nil)).to eql(I18n.t('admin.admin'))
    end

    it 'returns the proper name when a valid ID is given' do
      expect(subject.render_customer(id: customer.id)).to eql(customer.name)
    end

    it 'returns the I18n translations for (deleted) when an invalid ID is given' do
      expect(subject.render_customer(id: -1)).to eql(I18n.t('admin.deleted'))
    end
  end

  describe '#percent_of' do
    it 'calculates the percentage correctly' do
      expect(subject.percent_of(0, 1)).to eql(0)
      expect(subject.percent_of(1, 1)).to eql(100)
      expect(subject.percent_of(1, 2)).to eql(50)
      expect(subject.percent_of(1, 3)).to eql(33)
    end
  end
end
啊,

我是个白痴。。。。 问题是,我的
主题
是在特定测试的描述块中定义的,而第二个没有。
这意味着我们的钩子尝试在外部描述块中创建类的实例

这就是解决办法:

require 'spec_helper'

describe ::Admins::BasePresenter do
  let(:customer) { Customer.first }
  subject { ::Admins::BasePresenter.new(Object.new, ApplicationController.new.view_context) }

  describe '#render_customer' do
    it 'returns the I18n translations for (admin) when no customer is set.' do
      expect(subject.render_customer(id: nil)).to eql(I18n.t('admin.admin'))
    end

    it 'returns the proper name when a valid ID is given' do
      expect(subject.render_customer(id: customer.id)).to eql(customer.name)
    end

    it 'returns the I18n translations for (deleted) when an invalid ID is given' do
      expect(subject.render_customer(id: -1)).to eql(I18n.t('admin.deleted'))
    end
  end

  describe '#percent_of' do
    it 'calculates the percentage correctly' do
      expect(subject.percent_of(0, 1)).to eql(0)
      expect(subject.percent_of(1, 1)).to eql(100)
      expect(subject.percent_of(1, 2)).to eql(50)
      expect(subject.percent_of(1, 3)).to eql(33)
    end
  end
end
require 'spec_helper'

describe ::Admins::BasePresenter do
  let(:customer) { Customer.first }
  subject { ::Admins::BasePresenter.new(Object.new, ApplicationController.new.view_context) }

  describe '#render_customer' do
    it 'returns the I18n translations for (admin) when no customer is set.' do
      expect(subject.render_customer(id: nil)).to eql(I18n.t('admin.admin'))
    end

    it 'returns the proper name when a valid ID is given' do
      expect(subject.render_customer(id: customer.id)).to eql(customer.name)
    end

    it 'returns the I18n translations for (deleted) when an invalid ID is given' do
      expect(subject.render_customer(id: -1)).to eql(I18n.t('admin.deleted'))
    end
  end

  describe '#percent_of' do
    it 'calculates the percentage correctly' do
      expect(subject.percent_of(0, 1)).to eql(0)
      expect(subject.percent_of(1, 1)).to eql(100)
      expect(subject.percent_of(1, 2)).to eql(50)
      expect(subject.percent_of(1, 3)).to eql(33)
    end
  end
end