【问题标题】:RSpec example fails with the error I'm expectingRSpec 示例失败并出现我期望的错误
【发布时间】:2019-12-07 01:11:05
【问题描述】:

在 Rails 6.0.0 中使用 RSpec 我指定在执行操作后需要删除记录。为此,我在对象上调用reload 并期望它引发ActiveRecord::RecordNotFound 错误

具有讽刺意味的是,由于ActiveRecord::RecordNotFound 错误,测试失败了。那是怎么回事?

这是我的规范的相关部分:

  context 'when deleting a notice' do
    let(:notice) { FactoryBot.create(:program_notice) }
    let(:request_proto) { Sil::Rev79::Id.new(uuid: notice.id) }
    subject { run_rpc(:DeleteNotice, request_proto) }

    context 'as admin user' do
      include_context 'admin user'

      it "deletes the notice" do
        expect(subject).to be_a Google::Protobuf::Empty
        expect(notice.reload).to raise_error ActiveRecord::RecordNotFound
      end

    end
  end

这是失败信息:

3) 管理员用户删除通知时的 ProgramsController 通知 失败/错误:expect(notice.reload).to raise_error ActiveRecord::RecordNotFound

 ActiveRecord::RecordNotFound:
   Couldn't find ProgramNotice with 'id'=47e2d9c1-a009-4b9c-a7a5-2279ae74d74d
 # ./spec/rpc/programs_controller_spec.rb:360:in `block (4 levels) in <main>'

测试文件中的第 360 行是第二个 expect 语句。

【问题讨论】:

  • 试试expect { notice.reload }.to raise_error ActiveRecord::RecordNotFound。在此处阅读doc。阅读此answer 了解为什么在这种情况下阻止很重要。

标签: ruby-on-rails error-handling rspec


【解决方案1】:

第二个期望需要用块来设置,不能作为参数:

expect { notice.reload }.to raise_error ActiveRecord::RecordNotFound

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-24
    相关资源
    最近更新 更多