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

wil*_*ils 5 ruby rspec ruby-on-rails rspec-rails ruby-on-rails-4

我正在使用rspec-given并继续收到此错误.

故障/错误:然后{ Then从一个示例(例如,内不可用it块)或者从在一个例子(例如范围运行构建体before,let等).它仅适用于示例组(例如a 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
Run Code Online (Sandbox Code Playgroud)

K M*_*lam 4

错误消息说明了一切:

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).
Run Code Online (Sandbox Code Playgroud)

请仔细阅读错误消息。您可以在错误消息本身中找到解决方案。

您不能在块Then内使用it,只能使用Thenwithdescribecontext块。

因此,要解决您的问题,只需使用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
Run Code Online (Sandbox Code Playgroud)

请参阅此处的更多示例