Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何在我的测试中触发Railtie初始值设定项?_Ruby On Rails_Ruby_Gem_Initialization_Railtie - Fatal编程技术网

Ruby on rails 如何在我的测试中触发Railtie初始值设定项?

Ruby on rails 如何在我的测试中触发Railtie初始值设定项?,ruby-on-rails,ruby,gem,initialization,railtie,Ruby On Rails,Ruby,Gem,Initialization,Railtie,我有我自己的宝石,我的领带看起来像 class MyRailtie < Rails::Railtie initializer "my_railtie.configure_rails_initialization" do # some initialization behavior end end class MyRailtie

我有我自己的宝石,我的领带看起来像

class MyRailtie < Rails::Railtie
  initializer "my_railtie.configure_rails_initialization" do
    # some initialization behavior
  end
end
class MyRailtie
我正试图测试它,但在测试中,初始化器从未被调用。我注意到我在另一个gems中有一些依赖项,它们也有一个初始值设定项,它们也没有被调用


您知道除了需要该文件之外,我还应该做什么吗?

由于初始值设定项是Rails功能的一部分,您需要将该Railtie加载到Rails应用程序中,以便自动调用它。这通常是通过在spec文件夹中构建一个小的Rails应用程序来完成的,但是手工设置是一件痛苦的事情。幸运的是,有一个优秀的gem,它使测试引擎(或带有导轨的gem)变得轻而易举。它将负责为您设置Rails应用程序,并确保您的测试在该Rails环境中运行(包括运行该初始值设定项)。

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

打领带 发动机
试试Rails.application.initialize!我们真的需要一个虚拟应用程序吗?我看到一些gem不需要它,但仍然需要rails。这取决于gem使用的rails功能。由于您想要测试初始值设定项,很遗憾,要单独运行它们非常困难——它有未记录的参数,并且可能需要一个Rails应用程序。从技术上讲,你可以弄清楚所有这些,但我认为这比使用
combustion
更混乱、更脆弱。您还可以将初始值设定项中的代码移动到一个方法中,从测试中调用该方法,并且只需相信Railtie按预期工作即可。我喜欢Combustion gem!很不错的。更不用说“rails应用程序”的“脚手架”:)+1
MyRailtie::Railtie.initializers.each(&:run)
MyEngine::Engine.initializers.each(&:run)