首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Rails环境下运行的rails隔离测试

在Rails环境下运行的rails隔离测试
EN

Stack Overflow用户
提问于 2012-03-22 20:50:29
回答 2查看 221关注 0票数 0

我目前正在做一个项目,我们开始将我们的测试迁移到隔离测试(没有rails依赖,并使用存根和模拟)。问题是,在隔离所有当前测试之前,我们必须将这些测试与隔离的测试一起运行,这将启动rails环境。

当隔离测试中有一个伪类(类Foo;end;)时,问题就出现了,它将覆盖其余测试的原始类。

示例:在foo_spec.rb中,我们有下面这一行

代码语言:javascript
复制
class Bar; end;

这将覆盖下一个非隔离测试的Bar类,并将导致许多失败。

我认为有两种方法可以解决这个问题:-要么在rails环境下运行测试时注释掉假类--将隔离的测试放在另一个文件夹中,并将它们与其他测试分开运行(这会更有意义)

你能想出一个更好的方法来解决这个问题吗?

EN

回答 2

Stack Overflow用户

发布于 2012-03-22 22:54:42

我们使用的是rspec (它不会改变任何东西),我们的rails规范位于spec中,它有自己的spec_helper.rb文件,用于加载环境和所有丑陋的东西。

spec_fast文件夹中,我们有可以在没有rails的情况下运行的所有规范,以及它们自己的规范帮助器,它只加载我们独立的lib文件夹。

对于我们的ci-server,我们让这两个spec文件夹在不同的任务中运行:

代码语言:javascript
复制
if Rails.env.test?
  require 'rspec/core/rake_task'
  require 'ci/reporter/rake/rspec'

  RSpec::Core::RakeTask.new(:all_fast) do |t|
    t.pattern = 'spec_fast/**/*_spec.rb'
  end

  RSpec::Core::RakeTask.new(:all_slow) do |t|
    t.pattern = 'spec/**/*_spec.rb'
  end

  task :all => ["ci:setup:rspec", :all_fast, :all_slow]
end

也应该可以将它们放在单独的子文件夹中,如spec/railsspec/fast,但我没有尝试,因为这意味着要在规范文件中进行大量的路径更改。

票数 0
EN

Stack Overflow用户

发布于 2012-03-22 23:47:14

我不知道这是否正确,但我最终实际上没有将这种上下文虚拟手动创建的虚拟类赋给常量。

而不是:

代码语言:javascript
复制
#no
class Foo
   #something
end

而是:

代码语言:javascript
复制
foo = Class.new do
  #stuff
end

您可以尽情地使用foo.new或foo.class_method。也可能在@foo中。但是你没有像普通的类定义那样把它赋给常量Foo,你是在创建一个“匿名”类,并把它赋给一个普通的变量,作用域就在你需要它的区域内。

注意:我并不是说这是用rspec做事情的“正确”方式,我从来不觉得我知道该做什么,正确的事情可能是根本不创建这样的类,或者使用一些我不理解的奇怪的factorygirl之类的东西。但是当我需要创建“虚拟”类型的类时,这就是我所做的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9822624

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档