如何在测试中触发Railtie初始化程序?

Ste*_*gán 4 ruby gem initialization ruby-on-rails railtie

我有自己的宝石,我的护发带看起来像...

class MyRailtie < Rails::Railtie
  initializer "my_railtie.configure_rails_initialization" do
    # some initialization behavior
  end
end
Run Code Online (Sandbox Code Playgroud)

并且我正在尝试对其进行测试,但是在测试中,初始化器从未被调用。而且我注意到我也依赖于另一个具有初始化程序的gem,它们也不会被调用。

您是否知道除了需要文件外还应该做什么?

Rya*_*ary 6

在测试中的beforeorsetup块中,您可以执行以下操作:

对于铁匠

MyRailtie::Railtie.initializers.each(&:run)
Run Code Online (Sandbox Code Playgroud)

对于发动机

MyEngine::Engine.initializers.each(&:run)
Run Code Online (Sandbox Code Playgroud)


Rob*_*bel 5

由于初始化器是Rails功能的一部分,因此您需要将该Railtie加载到Rails应用程序中才能自动调用它。通常,这是通过在您的spec文件夹中构建一个小的Rails应用程序来完成的,但是手工设置很麻烦。幸运的是,有一种出色的宝石叫做燃烧,它使测试引擎(或带栅栏的宝石)轻而易举。它将为您设置该Rails应用程序,并确保您的测试在该Rails环境中运行(包括运行该初始化程序)。