2014-09-22 58 views
9

我正在尝试使用RSpec来功能测试我的REST API。将参数传递给命令行上的Rspec测试

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

到目前为止我发现的一切使它看起来像RSpec不能做到这一点。如果我不能在命令行中传递参数,还有另一种方法吗?或者RSpec不是这个的正确选择?

+0

你为什么需要这个? – 2014-09-23 00:40:07

+0

想到我描述了这个场景。我想要一个能够构建应用程序的jenkins构建,运行单元测试,然后将构建部署到临时云服务器(新的ec2实例或降低成本,测试完成后关闭),然后运行测试。由于这将是一个新的服务器,我不会知道URL来运行测试。 – 2014-09-23 14:31:59

+0

不是问题的答案,但是您是否尝试过https://travis-ci.org/?不知道他们是否有方法来整合这些参数 – dfherr 2014-09-23 16:19:59

回答

13

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

Look here如何从代码运行rspec。

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

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

代码

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

我建议两个方法,因为它是在我看来,更清洁,更简单的方法。

+0

谢谢。我以为我曾经提到它,但没有。我以前遇到过环境变量方法。这对我来说似乎是一种破绽,但可能最终成为唯一的方式。我会用耙子检查一下,看看它是如何工作的。 – 2014-09-23 14:33:26

+0

工作。毕竟不是太讨厌。谢谢! – 2014-09-23 17:13:09

+0

如果您使用TeamCity,然后写: 'url = ENV ['SPEC_URL'] .to_s.empty? ? ENV ['SPEC_URL']:“http:// localhost:4000”' ENV ['SPEC_URL']不仅可以是零,也可以是空字符串(在TeamCity的情况下)。 – Evmorov 2016-11-03 12:44:21