【问题标题】:Rspec, mapping spec files to ruby files under testRspec,将规范文件映射到正在测试的 ruby​​ 文件
【发布时间】:2010-02-20 23:18:29
【问题描述】:

我想要的是一种不必在每个规范文件中“要求”被测类的方法。

所以希望有一种方法可以设置被测源代码的根目录,并且 rspec 自动映射我的测试,或者任何其他自动将规范映射到 ruby​​ 文件的方法。

在 Rspec for rails 中这很神奇,但这不是 rails 项目,我找不到任何有用的信息。

【问题讨论】:

    标签: ruby rspec lazy-evaluation


    【解决方案1】:

    我假设您的项目中有一个 lib 文件夹和一个 spec 文件夹,其中分别有代码和规范。创建一个spec/spec_helper.rb 并添加

     # project_name/spec/spec_helper.rb
     $: << File.join(File.dirname(__FILE__), "/../lib") 
     require 'spec' 
     require 'main_file_within_lib_folder_that_requires_other_files'
    

    现在在您的个人规范文件中,您只需要像 rails 一样添加以下行

     require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
    

    【讨论】:

    • 如果您不希望在每个规范文件的顶部使用 spec_helper,您可以使用 spec -r spec/spec_helper.rb 运行您的规范(或修改您的 rake 规范任务以使用它-r 选项)
    • 如果你使用自动测试呢?
    【解决方案2】:

    你要做的就是重新定义Object.const_missing

    找到这个基本的example,修改它以满足您的需要(设置正确的路径等):

    def Object.const_missing(name)
      @looked_for ||= {}
      str_name = name.to_s
      raise "Class not found: #{name}" if @looked_for[str_name]
      @looked_for[str_name] = 1
      file = str_name.downcase
      require file
      klass = const_get(name)
      return klass if klass
      raise "Class not found: #{name}"
    end
    

    【讨论】:

      猜你喜欢
      • 2010-09-13
      • 2021-06-19
      • 2021-11-24
      • 1970-01-01
      • 1970-01-01
      • 2014-09-17
      • 1970-01-01
      • 2019-04-04
      • 1970-01-01
      相关资源
      最近更新 更多