为什么在RSPEC中对于包含模块中的方法调用的未定义方法?

时间:2013-05-20 04:14:18

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

在我们的rails 3.2.12应用中,model project需要在find_config_const引擎中的模块authentify_utility.rb中使用方法authentify。在model project,所以有

include Authentify::AuthentifyUtility 

方法find_config_constmodel project中调用为:

validates :sales_id, :presence => true,
                       :numericality => {:greater_than => 0} if find_config_const('project_has_sales', 'projectx') == 'true'

这是rspec中的错误:

project.rb:51:in `<class:Project>': undefined method `find_config_const' for Authentify::AuthentifyUtility:Module (NoMethodError)

在模块authentify_utility中,在方法定义之后,方法find_config_const的模块函数声明为(使方法可供其他人使用):

module_function :find_config_const

执行除此rspec错误之外的代码时没有错误。如何修复rspec的这个错误?这是rspec中的一个错误吗?谢谢你的帮助。

更新:

方法的定义

def find_config_const(param_name, engine=nil, version=nil)
      const_value = nil
      engineConfig = Authentify::EngineConfig.where(:engine_name => engine, :engine_version => version, :argument_name => param_name).first() if engine.present? && version.present?
      engineConfig = Authentify::EngineConfig.where(:engine_name => engine, :argument_name => param_name).first() if engine.present? && version.blank?
      engineConfig = Authentify::EngineConfig.where(:argument_name => param_name).first() if engine.blank? && version.blank?
      const_value = engineConfig.argument_value unless  engineConfig.nil?
      const_value
end

2 个答案:

答案 0 :(得分:1)

您能否显示find_config_const的定义?

如果没有看到它,我最好的猜测是你不应该用模块名称调用方法,因为你在模型中#include它。

答案 1 :(得分:1)

您必须在spec_helper.rb或您的规范中要求使用该模块:

require 'authentify/authentify_utility'