【问题标题】:Pass parameter to Rspec test on the command line在命令行上将参数传递给 Rspec 测试
【发布时间】:2014-09-22 20:32:33
【问题描述】:

我正在尝试使用 RSpec 对我的 REST api 进行功能测试。

我希望它工作的方式是使用 CI 构建来构建我的应用程序并将其部署到云中某处的测试服务器,然后让它启动自动化功能测试。但为了正确地做到这一点,我需要能够传入应用程序部署位置的基本 url/域。它不会是一样的。

到目前为止,我发现的所有内容都使 RSpec 似乎无法做到这一点。如果我无法在命令行上传递参数,还有其他方法吗?或者 RSpec 不是这个的正确选择?

【问题讨论】:

  • 你为什么需要那个?
  • 以为我描述了这个场景。我想要一个 jenkins 构建,它可以构建应用程序,运行单元测试,然后将构建部署到临时云服务器(新的 ec2 实例或为了降低成本,将在测试完成后关闭),然后运行测试。由于这将是一个新服务器,我不知道运行测试的 url。
  • 不是这个问题的真正答案,但你试过travis-ci.org 吗?不知道他们是否有办法整合这些参数
  • 你描述了这个场景,但你没有解释为什么“为了正确地做到这一点,我需要能够传递应用程序部署的基本 url/域”

标签: ruby rest rspec functional-testing


【解决方案1】:

一种方法是使用接受命令行参数的东西绕过对 rspec 的调用,然后在代码中启动 rspec。如果您不想为此编写自己的二进制文件,rake 也可以。

Look here 了解如何从代码运行 rspec。

另一种方法是在调用测试时设置 ENV 变量,最好在规范中将其设为可选。

$> SPEC_URL=http://anotherhost:666 rspec

在代码中:

url = ENV['SPEC_URL'] || "http://localhost:4000"

我会推荐方法二,因为在我看来它更干净、更容易。

【讨论】:

  • 谢谢。我以为我提到了它,但没有。我之前遇到过环境变量方法。这对我来说似乎是一种黑客行为,但最终可能不得不成为唯一的方法。我将使用 rake 进行检查,看看它是如何工作的。
  • 如果你使用 TeamCity,那么写:url = ENV['SPEC_URL'].to_s.empty? ? ENV['SPEC_URL'] : "http://localhost:4000"ENV['SPEC_URL'] 不仅可以是 nil,还可以是一个空字符串(如果是 TeamCity)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-14
  • 1970-01-01
  • 1970-01-01
  • 2021-04-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多