【发布时间】:2015-08-10 07:05:01
【问题描述】:
好的,
这让我发疯了,因为我不明白这种情况下的错误。 我定义了以下类:
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
继承自下面的BasePresenter:
class BasePresenter
def initialize(object, template)
@object = object
@template = template
end
def self.presents(name)
define_method(name) do
@object
end
end
def underscored_class
@object.class.name.underscore
end
protected
def h
@template
end
def handle_none(value, html = true)
if value.present?
if block_given?
yield
else
value
end
else
return h.content_tag(:span, '-', class: 'none') if html
'-'
end
end
def current_customer
@current_customer ||= h.current_customer
end
def current_user
@current_user ||= h.current_user
end
end
但是,当我尝试运行我的规范时,我从 RSpec 收到以下错误:
ArgumentError:参数数量错误(0 代表 2) ./app/presenters/base_presenter.rb:3:in
initialize' ./spec/presenters/admins/base_presenter_spec.rb:24:inblock (3 水平)在'
该类与其他存在没有什么不同,继承以完全相同的方式工作并且那些测试通过了。
只是这个类的测试因为这个错误而失败,并且只有在测试方法percent_of时才失败。
我没看到什么?
编辑
这是我的 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
【问题讨论】:
标签: ruby-on-rails ruby inheritance rspec