【问题标题】:Unable to include shoulda tests in a module无法在模块中包含应该测试
【发布时间】:2023-03-12 06:54:02
【问题描述】:

我正在使用带有 MiniTest 的 Rails,并且有几个类都通过继承相关。我想通过将测试放在一个模块中来重用它们。像这样的:

module MyModule
  should 'work' do
    assert true
  end
end

然后在我的测试中:

class MyTest < ActiveSupport::TestCase
  require MyModule
end

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

我错过了什么?

【问题讨论】:

  • 如果将should 'work' do... 方法定义移动到MyTest 主体中,是否还会出现错误?尝试将should 替换为it

标签: ruby minitest shoulda ruby-2.1


【解决方案1】:

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) 或者,您可以只 extend 模块并通过 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.extended

module MyModule
  def self.extended(base)
    base.should 'work' do
      assert true
    end
  end
end

class MyTest < ActiveSupport::TestCase
  extend MyModule
end

【讨论】:

    【解决方案2】:

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

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

    或者你可以把这个 relative_path 放到 spec_helper 中,而不是只需要 'spec_helper' 。

    希望对你有帮助

    【讨论】:

    • 是的,文件已成功导入。否则,他不会得到 NoMethodError。
    • @acsmith 是正确的,文件正在正确导入。
    猜你喜欢
    • 2013-11-02
    • 2016-02-23
    • 1970-01-01
    • 2011-07-17
    • 1970-01-01
    • 2023-03-28
    • 1970-01-01
    • 2018-02-24
    • 1970-01-01
    相关资源
    最近更新 更多