代码之家  ›  专栏  ›  技术社区  ›  Tom Rossi

无法在模块中包含should a测试

  •  1
  • Tom Rossi  · 技术社区  · 10 年前

    我在MiniTest中使用Rails,并且有几个类都是通过继承来关联的。我希望通过将测试放在模块中来重用它们。类似于:

    module MyModule
      should 'work' do
        assert true
      end
    end
    

    然后在我的测试中:

    class MyTest < ActiveSupport::TestCase
      require MyModule
    end
    

    问题是我得到了 NoMethodError: undefined method should

    我错过了什么?

    2 回复  |  直到 10 年前
        1
  •  1
  •   Ryan McGeary    10 年前

    1) 这不是什么 require 用于。

    2a)你可能想 extend 并定义一个可以调用的方法。

    module MyModule
      def should_work
        should 'work' do
          assert true
        end
      end
    end
    
    class MyTest < ActiveSupport::TestCase
      extend MyModule
      should_work
    end
    

    2b)或者,您可以 延伸 模块,并通过自动调用测试 Module.extended :

    module MyModule
      def self.extended(base)
        base.should_work
      end
    
      def should_work
        should 'work' do
          assert true
        end
      end
    end
    
    class MyTest < ActiveSupport::TestCase
      extend MyModule
    end
    

    2c)你可以把所有东西都放进去 模块扩展 也是:

    module MyModule
      def self.extended(base)
        base.should 'work' do
          assert true
        end
      end
    end
    
    class MyTest < ActiveSupport::TestCase
      extend MyModule
    end
    
        2
  •  0
  •   zauzaj    10 年前

    您需要在顶部的MyTest类中输入模块文件:

    require 'spec_helper'
    require_relative '../spec/modules/module_file_name'
    

    或者您可以将此relative_path放入spec_helper中,而不仅仅需要“spec_helpr”。

    希望这对你有所帮助