Rails Devise授权测试Helper报参数错误但测试正常通过问题排查
问题原因
Minitest默认会将测试类中所有以test_为前缀的实例方法识别为独立测试用例,自动执行且执行时不会传入任何参数。
你封装的Helper方法命名为test_authorization,符合Minitest的测试用例命名规则,因此会被框架自动调用:
- 你自己在
test '仅管理员可访问报价列表页'用例中手动调用该方法时传入了3个参数,调用逻辑正常,所以你的业务测试全部通过 - Minitest自动执行该方法时没有传参,因此抛出
ArgumentError: wrong number of arguments (given 0, expected 3)的错误
补充说明:你贴出的代码存在笔误,test_authorization方法中调用的admin_access方法,实际定义的名称是boss_access,如果实际运行环境中没有修正这个笔误,你的手动调用也会报方法不存在的错误,大概率是贴代码时的书写错误。
修复方案
- 将Helper方法重命名为非
test_开头即可,比如改为check_authorization、assert_admin_authorized,Minitest就不会将其识别为独立测试用例自动执行 - 修正方法调用的笔误,保证调用的方法名和定义的一致
内容的提问来源于stack exchange,提问作者CJG
相关产品推荐
相关产品推荐

