如何在执行测试时阻止初始化程序脚本运行?

时间:2018-04-05 19:22:02

标签: ruby-on-rails unit-testing initialization minitest ruby-on-rails-5.1

我正在使用Rails 5.1环境。我有一个脚本位于

config/initializers/websockets.rb

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

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

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

2 个答案:

答案 0 :(得分:1)

初始化程序只是在Rails启动时执行的Ruby脚本,因此您可以在其中放置所需的任何代码。特别是,您可以查看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东西更有意义,然后设置一些模拟来替换测试中的功能。

答案 1 :(得分:0)

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

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