Ruby on rails 如何在黄瓜中测试不同的环境(例如开发|测试|生产)?

Ruby on rails 如何在黄瓜中测试不同的环境(例如开发|测试|生产)?,ruby-on-rails,ruby,testing,cucumber,Ruby On Rails,Ruby,Testing,Cucumber,以这个场景为例。我有一个谷歌分析跟踪代码,我只希望它显示在生产模式。所以我可能有两个类似的场景: Scenario: Don't embed tracking code in development or test mode Given the app is not in production mode When I go home Then I should really not see the tracking code Scenario: Embed tracking cod

以这个场景为例。我有一个谷歌分析跟踪代码,我只希望它显示在生产模式。所以我可能有两个类似的场景:

Scenario: Don't embed tracking code in development or test mode
  Given the app is not in production mode
  When I go home
  Then I should really not see the tracking code

Scenario: Embed tracking code in production mode
  Given the app is in production mode
  When I go home
  Then I should really see the tracking code

因此,尽管我知道如何检查当前环境是什么,并且知道如何在Rails或Sinatra中设置当前环境,但我不知道如何在特定环境中运行特定场景。甚至可能吗?

您应该能够在测试代码本身中强制环境,这与
ENV['RACK\u ENV']='test'
环境['RACK_ENV']='production'

我认为这是一个很糟糕的代码嗅觉。< /P> 为了让测试代码认识到它应该针对测试环境执行,我不得不在()之前处理环境。我想这只是在倒退


不过,google analytics跟踪cookies的网站不是特定的吗?在您的开发/测试/登台环境中使用跟踪cookie不应该影响您的统计数据。

我认为您真的应该使用cucumber点击您网站的实时URL;因为这可能是你真正想知道的——我的追踪是真的吗

这对我来说很有效,但是你需要使用水豚(如果存在的话,也许有人会发布类似的webrat解决方案)


你为什么要测试不同的环境?嗯,也许我解释得不好。我不想嵌入分析跟踪代码,除非它在生产环境中。因此,在视图中,我将检查环境是什么,如果是生产环境,则嵌入代码。但假设我想测试一下。我该怎么做呢?这是一件非常琐碎的事情-
if Rails.env.production。。。做跟踪代码
,这是我个人不会费心去测试的事情。是的,我知道如何实现它;问题在于测试实现。测试在自己的环境中运行;
测试
环境。问题是,如何在备用环境中运行特定场景?我完全理解你的问题,我只是不明白你为什么要问这个问题。它是一个单行的条件语句,因为它使用的是经过良好测试的Rails,所以总是有效的。您只需在生产环境中启动服务器一次,查看跟踪代码,并称之为良好。啊,我没有想到只需重新设置环境变量。是的,分析是否在您的开发或测试环境中并不重要,但是,如果您使用的是非异步代码段,并且没有internet连接,那么我认为您的页面将超时。但不管怎么说,这都是毫无意义的,这只是一个关于运行检查环境的测试的理论问题。谢谢啊,这是我没想到的。好主意!白兰度,这个答案比公认的要好得多。主张重新考虑接受Josh的回答。
Given /^the app is in production mode$/ do
  Capybara.current_driver = :selenium
  Capybara.app_host = 'http://www.joshcrews.com'
end

When /^I go home$/ do
  visit("http://www.joshcrews.com")
end

Then /^I should really see the tracking code$/ do
  page.body.should match /UA-7396376-1/
end