我们写了一些必要的测试,但速度很慢。因此我们将RSpec配置为排除它们,除了在Solano上,我们设置了一个ENV变量。
# spec_helper
unless ENV['RUN_ALL_TESTS'] == 'true'
config.filter_run_excluding :slow
end
这样可行,但我尝试编写一个rake任务,我们可以通过设置相同的ENV变量然后运行套件来调用本地运行的每个测试。我无法弄清楚如何触发RSpec。这就是我现在所拥有的:
# all_tests.rake
require 'rspec/core/rake_task'
desc 'Run all tests, even those usually excluded.'
task all_tests: :environment do
ENV['RUN_ALL_TESTS'] = 'true'
RSpec::Core::RakeTask.new(:spec)
end
当我运行它时,它不会运行任何测试。
我发现的大部分内容都是在测试中触发rake任务,测试rake任务或设置Rakefile。我们正在使用rspec-rails
,我们的默认rake任务已经设置完毕。
答案 0 :(得分:1)
要通过rake集成运行RSpec,您需要定义任务并调用它:
# all_tests.rake
require 'rspec/core/rake_task'
# Define the "spec" task, at task load time rather than inside another task
RSpec::Core::RakeTask.new(:spec)
desc 'Run all tests, even those usually excluded.'
task all_tests: :environment do
ENV['RUN_ALL_TESTS'] = 'true'
Rake::Task['spec'].invoke
end
Rake::Task['spec'].invoke
在您尝试时没有做任何事情,因为rake会在命令行和{中}转换一个任务名称,该名称不是已定义任务的名称,而是Rake::FileTask
的文件名{1}}。您没有定义Rake::Task
任务,但是您有一个'spec'
目录,因此spec
运行时没有错误并且什么也没做。
答案 1 :(得分:0)
我有一个类似的问题,bundle exec rake default
可以正确地创建RSpec::Core::RakeTask
,但bundle exec rake spec
会在Rake::FileTask
目录上创建一个spec
, bundle exec rake spec --trace
输出:
** Invoke spec (first_time, not_needed)
事实证明rspec-rails
位于:test
宝石组中,:test
和:development
需要:test
。< / p>
有趣的是(?),一旦我这样做,以前只在RAILS_ENV=development
组中的宝石也可以从规范中获得,即使使用rspec-rails
启动也是如此。我假设{
"apple": {
"linktext": "apple",
"target": "_blank",
"href": "http://www.apple.com"
},
"blog-article-foo-bar": {
"linktext": "foo bar",
"href": "http://www.foobar.com"
},
"dell": {
"linktext": "dell",
"target": "_parent",
"href": "http://www.dell.com"
}
}
在幕后参与了一些神奇的环境恶作剧。