当我执行测试时,如何防止 运行 的初始化脚本?

How do I prevent an initializer script from running when I execute a test?

我使用的是 Rails 5.1 环境。我有一个位于

的脚本
config/initializers/websockets.rb

当我的服务器启动时,这是 运行,但是,我不希望这个脚本在我执行测试时 运行,例如...

localhost:mine satishp$ rails test test/lib/websocket_client_test.rb

如何在我执行测试或至少执行此特定文件时阻止初始化程序脚本 运行ning?

将初始化程序脚本移出目录,然后再将其移回。

localhost:mine satishp$ mv $RUBY_DIRECTORY/config/initializers/websockets.rb /home/satishp && \
rails test test/lib/websocket_client_test.rb && \
cp /home/satishp/websockets.rb $RUBY_DIRECTORY/config/initializers/websockets.rb

初始化程序只是 Ruby 脚本,在 Rails 启动时执行,因此您可以在其中放入任何您想要的代码。特别是,您可以查看 Rails.env:

if(!Rails.env.test?)
  # Do whatever needs to be done...
end

或环境变量:

if(!ENV['SUPPRESS_WEB_SOCKET_INIT'])
   #...
end

然后在 运行 测试时设置 SUPPRESS_WEB_SOCKET_INIT 环境变量(如果更合适,也可以反转逻辑)。

虽然这些都是钝器,因此您可能需要重新考虑您的方法。也许在第一次需要时初始化你的 websocket 东西然后设置一些模拟来替换你测试中的功能会更有意义。