对于我的几乎所有规格,当rspec报告错误时,它会告诉我路径末尾的行号,例如。
rspec ./spec/controllers/eclubs_controller_spec.rb:21
但是在我的一个规范中,它报告错误位置,如此
rspec ./spec/controllers/eclubs/members_controller_spec.rb[1:1:2:3:1]
在块的嵌套方面可能有意义,但坦率地说是相当神秘。
规范的顶部部分看起来像这样
require 'rails_helper'
describe EclubsController do
并且不起作用的那个看起来像这样
require 'rails_helper'
describe Eclubs::MembersController do
我在两个文件中看到的唯一区别是一个控制器是命名空间的,但我有其他命名空间控制器正确报告错误行。
造成这种情况的原因是什么?
答案 0 :(得分:2)
当行号不够独特时,RSpec使用示例id来识别相关示例。
当动态定义示例时会发生这种情况,例如在循环中:
(0..10).each do |i|
it do
expect(i).to_not eq(5)
end
end
# rspec './my_spec.rb[1:6]'
或者在使用共享示例组时:
RSpec.shared_examples_for "not equal 5" do |i|
it do
expect(i).to_not eq(5)
end
end
RSpec.describe do
it_behaves_like "not equal 5", 5
it_behaves_like "not equal 5", 4
end
# rspec './my_spec.rb[2:1:1]'