RSpec示例失败,出现我预期的错误

时间:2019-07-29 16:46:51

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

在Rails 6.0.0中使用RSpec 我指定执行acion后需要删除一条记录。为此,我在对象上调用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删除   通知        失败/错误:期望(notice.reload)。提高到错误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语句。

1 个答案:

答案 0 :(得分:2)

第二个期望值需要设置一个块,而不是参数:

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