【问题标题】:Can Rails unit tests be run on a different environment than test?Rails 单元测试可以在与测试不同的环境中运行吗?
【发布时间】:2011-02-21 02:57:18
【问题描述】:

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

例如我们在database.yml中有:

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

我在此文档中找不到任何内容,但也许我找错地方了。有什么想法吗?

谢谢!

【问题讨论】:

  • 你使用什么测试框架?
  • 我们只是在使用基本的 Test::Unit,除此之外什么都没有。我们的测试需求相当简单,并且更多地涉及控制器逻辑,但框架不会(据我所知)允许我们在不启动数据库层的情况下运行功能测试。请注意,我不是 Ruby/Rails 开发人员,所以这对我来说是全新的......
  • 您有一个database.yml 供所有开发人员使用吗?为什么不让每个开发者创建他/她完全属于自己的database.yml?我建议为每个开发者使用不同的database.yml
  • 这对我来说似乎很奇怪,我们在单个 database.yml 中确实有不同的环境(例如上面的 dev-one、dev-2),但我还没有看到需要甚至没有办法有多个文件...不知道为什么。

标签: ruby-on-rails unit-testing testing


【解决方案1】:

到目前为止,这仍然不起作用。我已经提交了一个问题:https://github.com/rails/rails/issues/21478

我将通过更新编辑此答案

【讨论】:

    【解决方案2】:

    只需在您要运行测试时明确指定环境即可。你只需要事先做一些准备。

    假设您的新环境将被命名为“testjohn”(大概是为名为 John 的开发人员)。那么:

    1- 复制 config/environments/test.rbconfig/environments/testjohn.rb

    2- 将相应的 DB 节添加到 config/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 test:units 并在他们的个性化环境下自动执行测试。

    【讨论】:

    • 感谢您的回复,但是,这正是我尝试过的,但它不起作用。您在 RAILS_ENV 中指定的环境确实是在 rake 任务的上下文中加载的,但是,一旦 ruby​​ 执行您的测试,它就会静默地切换到您的测试环境并清除测试数据库并加载您的固定装置。经过更多的研究,似乎这种行为被深深地编码到了 Test::Unit 中,我有点放弃了这种可能性。但仍然非常愿意接受建议。
    猜你喜欢
    • 1970-01-01
    • 2019-02-17
    • 2023-04-05
    • 2023-03-24
    • 1970-01-01
    • 1970-01-01
    • 2019-09-12
    • 2011-07-09
    • 1970-01-01
    相关资源
    最近更新 更多