rspec不报告错误行数

时间:2016-08-10 22:29:22

标签: ruby-on-rails rspec

对于我的几乎所有规格,当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

我在两个文件中看到的唯一区别是一个控制器是命名空间的,但我有其他命名空间控制器正确报告错误行。

造成这种情况的原因是什么?

1 个答案:

答案 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]'