Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 3 将rspec 2测试组织到';单位';和';整合';rails中的类别_Ruby On Rails 3_Testing_Rspec2 - Fatal编程技术网

Ruby on rails 3 将rspec 2测试组织到';单位';和';整合';rails中的类别

Ruby on rails 3 将rspec 2测试组织到';单位';和';整合';rails中的类别,ruby-on-rails-3,testing,rspec2,Ruby On Rails 3,Testing,Rspec2,如何将rspec 2测试分为“单元”(快速)和“集成”(慢速)两类 我希望能够只使用rspec命令运行所有单元测试,而不是“集成”测试 我希望能够只运行“集成”测试 一种方法是这样标记您的RSpec测试用例: it "should do some integration test", :integration => true do # something end 当您执行测试用例时,请使用以下方法: rspec . --tag integration 这将使用标签:integra

如何将rspec 2测试分为“单元”(快速)和“集成”(慢速)两类

  • 我希望能够只使用
    rspec
    命令运行所有单元测试,而不是“集成”测试
  • 我希望能够只运行“集成”测试
一种方法是这样标记您的RSpec测试用例:

it "should do some integration test", :integration => true do
  # something
end
当您执行测试用例时,请使用以下方法:

rspec . --tag integration

这将使用标签
:integration=>true执行所有测试用例。有关更多信息,请参阅。

我们有一些性质相同的小组。 然后,我们在本地开发人员框和CI上逐个运行

你可以简单地做

bundle exec rake spec:unit
bundle exec rake spec:integration
bundle exec rake spec:api
这就是我们的spec.rake看起来的样子

  namespace :spec do
    RSpec::Core::RakeTask.new(:unit) do |t|
      t.pattern = Dir['spec/*/**/*_spec.rb'].reject{ |f| f['/api/v1'] || f['/integration'] }
    end

    RSpec::Core::RakeTask.new(:api) do |t|
      t.pattern = "spec/*/{api/v1}*/**/*_spec.rb"
    end

    RSpec::Core::RakeTask.new(:integration) do |t|
      t.pattern = "spec/integration/**/*_spec.rb"
    end
  end
请注意,他们告诉您将gem放在“group:development,:test”下,就像这样

但如果您仅将其放在:test grouponly

group :test do
  gem 'rspec-rails', '~> 2.0'
end
然后您将得到上述错误


HTH

我必须按如下方式配置我的
装置
功能
测试:

require 'rspec/rails'

namespace :spec do
  RSpec::Core::RakeTask.new(:unit) do |t|
    t.pattern = Dir['spec/*/**/*_spec.rb'].reject{ |f| f['/features'] }
  end

  RSpec::Core::RakeTask.new(:feature) do |t|
    t.pattern = "spec/features/**/*_spec.rb"
  end
end

不得不在@KensoDev给出的答案中添加
require'rspec/rails'
并将
rspec
更改为
rspec

我建议使用
.rspec
文件来配置模式,而不是使用
rake
,因为在使用rake时向rspec传递标志很棘手

您可以在
.rspec
文件中读取环境变量:

<%= if ENV['TEST'] == 'integration' %>
--pattern spec/integration/**/*_spec.rb
<% else %>
<% ENV['TEST'] = 'unit' %>
--pattern spec/unit/**/*_spec.rb
<% end %>

--模式规范/集成/***\u spec.rb
--图案规格/单位/***\u规格.rb
然后您可以运行
TEST=integrationrspec
来运行集成测试,或者只运行
rspec
来运行单元测试。这种方法的优点是,您仍然可以向其传递标志,如:


TEST=integration rspec-t login-f doc

谢谢。当运行不带参数的
rspec
命令时,是否有方法排除这些“集成”情况?rspec--标记~集成。如果您使用的是zsh,那么它是一个稍微不同的:rspec--标记“~integration”@Evgenii:您还可以将
--tag“~integration”
放在project.rpsec文件中。这是我喜欢的方法。当然,它被您可能在命令行上显式指定的选项覆盖,因此您仍然具有完全的灵活性。这太棒了!但是我将该文件添加到lib/tasks中,但出现错误:rake中止!未初始化常量rspect这很奇怪,如果你有Rspec,你应该让它为你工作。我必须将Rspec core添加到Gemfile中,并将require'Rspec/core/rake_task'添加到文件中。奇怪的是,我认为rspec rails会包含这些依赖项。有一个输入错误,至少在我的设置中应该是“rspec::Core::RakeTask”,而不是“rspec::…”,明确地说,文件应该位于
lib/tasks/spec.rake
为什么不将单元测试存储在单独的目录中(例如
spec/unit
),并使用较不复杂的模式(例如,
spec/unit/***\u spec.rb
)?
<%= if ENV['TEST'] == 'integration' %>
--pattern spec/integration/**/*_spec.rb
<% else %>
<% ENV['TEST'] = 'unit' %>
--pattern spec/unit/**/*_spec.rb
<% end %>