rspec-给出的错误“Then”在示例中不可用(例如“it”块)

rspec-given error `Then` is not available from within an example (e.g. an `it` block)

我正在使用 rspec-given 并不断收到此错误。

Failure/Error:然后{ Then 在示例中(例如 it 块)或示例范围内 运行 的构造(例如 beforelet 中不可用, ETC)。它仅适用于示例组(例如 describecontext 块)。

describe SchoolService do
  Given(:school) { create(:school_with_applications) }
  Given(:service) { School.new(@school) }

  describe 'create_default_programs_and_year_grades!' do
    it 'checks program size' do 
      When { service.create_default_programs_and_year_grades! }
      Then { expect(school.programs.size).to eq 3 }
    end
  end
end

错误消息说明了一切:

Then is not available from within an example (e.g. an it block) or from constructs that run in the scope of an example (e.g. before, let, etc). It is only available on an example group (e.g. a describe or context block).

请仔细阅读错误信息。您在错误消息中找到了解决方案。

您不能在 it 块中使用 Then,您只能在 describecontext 块中使用 Then

因此,要解决您的问题,只需使用 context 而不是 it:

describe SchoolService do
  Given(:school) { create(:school_with_applications) }
  Given(:service) { School.new(@school) }

  describe 'create_default_programs_and_year_grades!' do
    context 'checks program size' do 
      When { service.create_default_programs_and_year_grades! }
      Then { expect(school.programs.size).to eq 3 }
    end
  end
end

查看更多examples here.