为什么我应该只在测试环境中运行我的rails app上的rspec规范,而不是dev或prod?

时间:2012-09-17 14:23:57

标签: ruby-on-rails ruby ruby-on-rails-3 testing rspec

有人告诉我,除了test之外,我不应该在rails_env中运行我的rspec规范。

在生产或开发中运行规范的潜在问题是什么?我在两者中运行规格。我通常在dev中运行规范,除非我正在测试使用资产管道的东西。我转而投入生产并花费15分钟预编译资产。使用测试环境比我现有的方法有什么好处吗?

我搜索了一个答案,但没有解释为什么我不应该使用dev或prod。

3 个答案:

答案 0 :(得分:7)

test环境中运行测试套件(例如 rspec )旨在隔离资源以解决安全问题,尤其是数据库的完整性。测试通常会破坏或完全删除数据库中的数据。

所有资源都是如此。通过使用test环境,您可以切断和模拟资源,从而防止测试破坏任何内容。

使用单独环境的原因有很多,但从根本上说它是资源分离,在test环境中,它可以在确保生产资源安全的同时验证您的应用程序。运行系统。

答案 1 :(得分:3)

让我们明确一点,特别是对于可能正在阅读此帖子的多维数据集:RAILS_ENV=production(本地)production环境中的运行测试“不同。”我知道你(OP)知道这一点,但是在生产环境中运行测试的危险值得警告。

仅在test env中运行有几个原因,通常与数据库的处理有关:

  • Rspec在数据库中构建数据的自定义“版本”,并对其进行操作,将某些更改保留回磁盘。
  • 许多测试消除了现有数据,直到测试隔离结束并使事物成为幂等的。这可能会将您正在使用的数据打造成测试中的建筑物。

其他原因也是你已经推测过的那些原因:

  1. 您的产品环境不应包含用于测试的宝石。为什么?:
    • 测试宝石添加更多可能需要的代码lod&在实时应用中运行不必要
    • 与测试相关的宝石可能会在您的生产应用中引入安全漏洞。
  2. 某些资产在“编译”后可能无法正常测试。
  3. 资产和其他deploy-pipe-line预编译可以不同的方式处理/关闭/ etc,以便为测试过程服务。
  4. 某些API和服务可能在测试/暂存中沙盒或存根,例如对电子邮件或报告等按使用付费服务的API调用。
  5. 可能性过于自定义(对您的应用)以建议最佳实践...但是,不用说,有许多“测试模式”设置可能需要配置rails_ENV=test

答案 2 :(得分:0)

你应该明确你的优先事项。你为什么要运行规格?

  1. ,确保您的环境xyz完全运行您的代码或
  2. 确保您的代码按原样执行
  3. 我想说,大多数ppl运行规格为2.,这确实应该在测试环境中进行,只是出于NewAlexandrias答案中给出的原因。

    如果要在部署后检查1.运行规格对我来说似乎有点牵强。应该有更简单的方法。

    当你部署,并且你不确定2.那就是过早部署时,你不应该这样做。