我正在构建一个测试套件来教授OOP。我希望spec/lib
文件夹中的文件按特定顺序执行。
我想定义一个类名数组,它们的测试套件将按顺序执行。
spec_order = %w(
FirstClass
SecondClass
ThirdClass
)
我怎么能做到这一点?
lib/
规格
spec/lib
文件夹
spec_helper.rb
项目根目录中的shell脚本
spec
以数字方式命名#!/bin/zsh
Files=( 'first' 'second' 'third' );
for file in "${Files[@]}"; do
rspec spec/lib/"$file"_spec.rb || exit 1
done
个文件:
_spec.rb
创建01_first_spec.rb
02_second_spec.rb
...
文件
.rspec
现在,当运行# .rspec
--order defined
时,文件应按排序顺序执行。
答案 0 :(得分:4)
以数字方式命名if (!is_object($user)) {
$this->createNotFoundException('The user does not exist');
}
个文件:
_spec.rb
创建01_first_spec.rb
02_second_spec.rb
...
文件
.rspec
现在,当运行# .rspec
--order defined
时,文件应按排序顺序执行。
答案 1 :(得分:1)
但是,如果要按特定顺序运行测试文件,则可以通过编写脚本来实现:
考虑以下脚本(ordered_test_script.sh):
for f in file1_spec.rb file2_spec.rb file3_spec.rb
do
rspec $f
done
确保脚本可执行:
chmod +x ordered_test_script.sh
然后你可以运行脚本:
./ordered_test_script.sh
首先,您可能希望扩展String类以包含下划线方法:
class String
def underscore
self.gsub(/::/, '/').
gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2').
gsub(/([a-z\d])([A-Z])/,'\1_\2').
tr("-", "_").
downcase
end
end
这会将camelcase类名称变为下划线名称。例如(MyClass => my_class)
classes = %w(MyClass1 MyClass2 MyClass3)
classes.each do |c|
system("rspec #{c.to_s.underscore}_spec.rb")
end
希望这有帮助。
答案 2 :(得分:0)
当然,默认情况下进行随机化是一种很好的做法,但在某些情况下,例如在尝试跟踪规范中与订单相关的问题或生成文档时,指定临时订单可能会很好。 / p>
您可以为部分(或全部)规范文件指定“全局”排序,如下所示:
config.register_ordering(:global) do |items|
files = <<END.split("\n")
./spec/some_spec.rb
./spec/another_spec.rb
END
# Original RSpec random order
randomized = RSpec::Core::Ordering::Random.new(config).order(items)
# Now do a stable sort by filename index
randomized.sort_by.with_index do |example_group, index|
files.index(example_group.file_path) || files.size + index
end
end
register_ordering
的文档可用on Relish。