ruby-on-rails - RSpec 示例失败并出现我期望的错误
问题描述
在 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
推荐阅读
- c++ - 如何修复无效的 API 密钥、IP 或操作权限错误?
- java - 为什么我的实例变量没有被@Inject 初始化为null?
- php - 将数字添加到foreach循环php
- azure - 带有 Azure DevOps 版本的环境变量以及 Azure 应用服务和 Docker
- python-3.7 - 在使用底图时确定是否存在海岸线
- ios - 当 flatMapped 时,Combine 的 Future 永远不会完成
- javascript - Promise.all 中的回调
- android - 为了防止内存泄漏,是否也需要杀死放置在库中的侦听器?
- c# - 不支持带有中文字符的 PDFsharp 和 Microsoft YaHei 字体?
- html - 2 span in div,第一个自动宽度和溢出隐藏,第二个宽度自适应文本