Ruby on rails 3 将rspec 2测试组织到';单位';和';整合';rails中的类别
如何将rspec 2测试分为“单元”(快速)和“集成”(慢速)两类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
- 我希望能够只运行“集成”测试李>
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 %>