ruby - 如何使用 rspec 在 ruby​​ 中模拟 super?

标签 ruby rspec rspec2

我通过创建一个扩展到库类的子类来扩展现有的库。

在子类中,我能够测试 initialize 方法中的大部分功能,但无法模拟 super 调用。子类如下所示。

class Child < SomeLibrary
    def initialize(arg)
        validate_arg(arg)
        do_something
        super(arg)
    end

    def validate_arg(arg)
        # do the validation
    end

    def do_something
        @setup = true
    end
end

如何编写 rspec 测试(使用 mocha)以便我可以模拟 super 调用?请注意,我正在测试 Child 类中的 initialize 方法的功能。当提供额外参数时,我是否必须创建不调用 super 的单独代码路径?

最佳答案

你不能模拟 super,你也不应该。当您模拟某些内容时,您正在验证是否收到了特定消息,而 super 不是一条消息——它是一个关键字。

相反,弄清楚如果缺少 super 调用,该类的行为会发生什么变化,并编写一个示例来练习和验证该行为。

关于ruby - 如何使用 rspec 在 ruby​​ 中模拟 super?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15856334/

相关文章:

ruby-on-rails - CanCan load_and_authorize_resource 触发 Forbidden Attributes

ruby - 在 RSpec Rake 任务与 rspec runner 中引用文件位置

ruby-on-rails - rake 数据库 :create ruby on rails

ruby - Websocket发送无法从电话网络发送

ruby-on-rails - 用于构建成就系统的 Ruby/Rails 现代工具

testing - RSpec 我要测试关系的双方吗

ruby - 如何访问我在 Selenium Webdriver 中添加的 Firefox 扩展?

ruby-on-rails - RSpec:receive_message_chain的匹配参数

ruby-on-rails - 我应该用 Rspec 测试 Controller 助手还是 Controller 本身?

ruby-on-rails - R规范 : How to write conditional validation when it also works with validate