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)