2010-05-18 116 views
9

我们在Rails下有一个大型的多开发者项目,我们在这个项目中使用了模型和控制器的测试。现在,开发人员必须在运行测试之前切换“测试”环境的数据库参数以匹配其本地开发环境。我想知道是否有办法在'test'之外的任何环境下运行这些测试?Rails单元测试可以运行在与测试不同的环境中吗?

例如我们在database.yml中:

test: 
    database: ... 
    host: ... 
    username: ... 
    password: ... 
... 
dev-one: 
    ... 
dev-two: 
    ... 

我找不到这个的文档什么,但也许我找错了地方。有任何想法吗?

谢谢!

+0

您使用哪种测试框架? – 2010-05-18 21:33:09

+0

我们只是使用基本的Test :: Unit,除此之外没有什么。我们的测试需求相当简单,并且比控制器逻辑更接触任何东西,但是框架不会(据我所知)允许我们在不启动数据库层的情况下运行功能测试。请注意,我不是一个Ruby/Rails开发人员,所以这对我来说都是新的...... – futureal 2010-05-18 21:38:20

+0

你有一个'database.yml'给所有开发者吗?你为什么不让每个开发者创建他/她完全自己的'database.yml'?我建议为每个开发人员使用不同的'database.yml'。 – jigfox 2010-05-18 22:13:14

回答

0

只是在您要运行测试时明确指定环境。您只需事先做好几项准备。

说你的新环境将被命名为“testjohn”(大概是一个名为John的开发者)。然后:

1-复印配置/环境/ test.rb配置/环境/ testjohn.rb

2-相应DB节添加到配置/ database.yml的(复制从测试节中重命名它,然后大概更改数据库名称,密码和其他数据)。 我(相当简单)示例使用此:

testjohn: 
    adapter: sqlite3 
    database: db/testjohn.sqlite3 
    pool: 5 
    timeout: 5000 

3-运行测试如下:

RAILS_ENV="testjohn" rake db:migrate 
RAILS_ENV="testjohn" rake test:units 

另外,由于RAILS_ENV仅仅是一个环境变量,你可能有一个脚本,设置它事先,甚至让每个开发人员在他的.profile或其他文件中配置他自己的RAILS_ENV变量。这样他们只需运行rake测试:单元并在其个性化环境下自动执行测试。

+2

然而,欣赏这种反应,这正是我所尝试过的,它不起作用。您在RAILS_ENV中指定的环境实际上是在rake任务的上下文中加载的,但是,一旦ruby执行测试,它将悄悄切换到您的测试环境并清除测试数据库并加载您的灯具。 经过更多的研究,似乎这种行为被编码得很深入Test :: Unit,我有点放弃了这种可能性。但仍然很乐意提供建议。 – futureal 2010-05-19 08:40:54

+1

也试过这个,不起作用 – Joshua 2015-06-25 22:07:03

相关问题