首页 > 解决方案 > 测试 ruby​​ 模块类方法不起作用

问题描述

我有一个这样的红宝石模块:

module SomeModule
  module Account
    def self.account_info
      raise NotImplementedError
    end
  end
end

这是我的测试:

  describe ExchangeClientWrapper::Account do
    let(:mock_class) do
      class MockClass
        extend SomeModule::Account
      end
    end

    describe ".account_info" do
      it "raises a NotImplementedError" do
        expect { mock_class.account_info }.to raise_error(NotImplementedError)
      end
    end
  end
end

我收到此错误:

 expected NotImplementedError, got #<NoMethodError: undefined method `account_info' for MockClass:Class> with backtrace:

到底是怎么回事?

这不起作用:

module A
    module B
      def self.d
        puts "hi there"
      end
    end
end

class C
    extend A::B
end

C.d

但似乎这有效:

 module A
    module B
      def self.d
        puts "hi there"
      end
    end
end

class C
    include A
end

C::B.d

标签: ruby

解决方案


阅读本文中解释包含、扩展和前置的参考资料,我发现它extends已经与 Singleton 类一起使用,因此self没有必要。

我用这段代码做了一个小测试,它删除self了定义中的

module SomeModule
  module Account
    def account_info
      raise NotImplementedError
    end
  end
end

class MockClass
  extend SomeModule::Account
end

MockClass.account_info

这引发了 NotImplementedError


推荐阅读