我有一个Company
的课程include GrowthRate
。
class Company < ActiveRecord::Base
include GrowthRate
end
在growth_rate.rb
中,我为Array
添加了一些方法。
module Company::GrowthRate
extend ActiveSupport::Concern
end
module Company::GrowthRate::Array
def growth_rate
# calculate growth rate
end
end
class Array
include Company::GrowthRate::Array
end
我想通过MiniTest测试Array的方法。
require 'test_helper'
class CompanyTest < ActiveSupport::TestCase
include Company::GrowthRate
test 'test for adjusted_growth_rate' do
array = [1, 0.9]
Array.stub :growth_rate, 1 do
# assert_equal
end
end
end
但测试最终会出现名称错误。
NameError: undefined method `growth_rate' for `Company::GrowthRate::Array'
如何包含MiniTest的方法?
ENV['RAILS_ENV'] ||= 'test'
require File.expand_path('../../config/environment', __FILE__)
require 'rails/test_help'
require 'minitest/mock'
class ActiveSupport::TestCase
# Setup all fixtures in test/fixtures/*.yml for all tests in alphabetical order.
fixtures :all
end
答案 0 :(得分:0)
我认为你必须将models/company/growth_rate.rb
移动到带有filename =&#39; growth_rate.rb&#39;
然后不要使用Company类来防止冲突类名称
module GrowthRate
extend ActiveSupport::Concern
# ...
end
现在您可以将其包含在公司模型中
然后在config / initializers文件夹中创建包含
的array.rb文件class Array
def growth_rate
# calculate growth rate
end
end
这个文件只会被rails加载一次,如果你想
那么将自定义方法添加到Array类是件好事现在您可以从test / models / company / growth_rate_test.rb中删除include Company::GrowthRate
答案 1 :(得分:0)
您需要使用ActiveSupport
包含的块。
对于你的例子,我想它找不到b / c你不需要任何文件的方法。
module PolymorphicTest
extend ActiveSupport::Concern
included do
test 'some cool polymorphic test' do
assert private_helper_method
end
private
def private_helper_method
# do stuff
end
end
end
Minitest也不会自动加载这些内容,因此您需要确保它们包含在test_helper中每个测试或的require
中。
如果您需要我更多地解决这个问题,请询问。