在ruby中,有一种方法可以在定义变量或常量后"取消定义"它吗?
在我们的轨道environemnts,我们定义了三个contants之一是true
,根据不同的环境:TESTING
,DEVELOPMENT
或PRODUCTION
.然后,在控制器代码中,我们使用defined?
以查看我们所处的环境,即:defined? PRODUCTION
.
现在,我想对一些特定于环境的行为进行单元测试.我最初的尝试是在我的测试中设置适当的常量,然后在拆解时重置它们.然而,我无法弄清楚如何重置DEVELOPMENT
,并PRODUCTION
使得defined?
返回false.
显然,一个解决方案就是只检查合适的常量是否也是真的,除了检查它是否已定义,但这将导致必须触及相当数量的现有代码.
编辑:我意识到这绝对不是正确的做事方式.唉,改变它是一项非常重要的任务,所以我正在寻找一种简单的方法来单独测试现在的情况.另外,我也很好奇关于是否有可能取消定义变量/常数的低级语言问题.
我找到了这个答案
Object.send(:remove_const, "TESTING")
如果我没记错的话,send
在这里使用是一种黑客攻击,因为remove_const实际上是一种私有方法.你想问问自己为什么你需要在它们真正相互排斥的同时定义常量生产,开发和测试; 这就是为什么我赞成grepsedawk的答案.
嗯,我猜测因为这是用RubyOnRails标记的,我们在这里谈论Rails ...环境已经存储在RAILS_ENV中,所以做了类似工作的事情......
if (RAILS_ENV == "production") ...
我想你也可以这样写:
RAILS_ENV.include?("development")