Невозможно включить тесты musta в модуль

Я использую Rails с MiniTest и имею несколько классов, которые все связаны через наследование. Я хотел бы повторно использовать тесты, поместив их в модуль. Что-то вроде этого:

module MyModule
  should 'work' do
    assert true
  end
end

Тогда в моих тестах:

class MyTest < ActiveSupport::TestCase
  require MyModule
end

Проблема в том, что я получаю NoMethodError: undefined method should

Что мне не хватает?

2 ответа

Решение

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

Вам нужен файл модуля в классе MyTest, вверху:

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

Или вы можете поместить этот lative_path в spec_helper, а затем просто потребовать 'spec_helper' .

Надеюсь, это поможет вам

Другие вопросы по тегам