运行RSpec提示School does not implement #admission错误如何解决?
错误产生原因
allow_any_instance_of是RSpec中用来Mock类/模块的实例方法的专用方法,你在School模块中定义的admission带self.前缀,属于挂载在模块本身的类方法,不属于School实例的方法,因此RSpec检测不到对应的实例方法,抛出不存在的报错。- 你报错的测试代码中还存在语法问题:
receive(:admission),and_return中间多了多余的逗号,不符合链式调用的语法规范。
解决方案
根据你的实际业务需求二选一即可:
场景1:你需要保留admission作为类方法
直接修改RSpec测试代码,将Mock实例方法的写法替换为Mock类方法的写法即可:
allow(School).to receive(:admission).and_return(:body)
场景2:你本意是要定义admission为School的实例方法
修改lib/school.rb中的方法定义,去掉self.前缀即可,原有测试代码无需调整:
def admission() # 原有方法逻辑 end
内容的提问来源于stack exchange,提问作者jegan
相关产品推荐
相关产品推荐

