TypeError: wrong argument type class (expected module) in rspec

TypeError: wrong argument type class (expected module) in rspec

我正在开发一个简单的网络应用程序(打包为 gem)来学习 Ruby 和 TDD。 我有这个 class (receiver.rb):

require 'eventmachine'
class Receiver < EM::Connection
    def initialize(port)
        EM.run do
            EM.open_datagram_socket('0.0.0.0', port, self)
        end
    end
end

而这个测试 (receiver_spec.rb):

require "spec_helper"
require "net/receiver"

describe "Receiver" do
    it "can istantiate" do
        @rec = Receiver.new(500)
    end
end

无论如何,当我 运行 rspec 它打印出这个:

1) Receiver can istantiate
     Failure/Error: @rec = Receiver.new(500)
     TypeError:
       wrong argument type Receiver (expected Module)
     # /var/lib/gems/1.9.1/gems/eventmachine-     1.0.7/lib/eventmachine.rb:1535:in `include'
     # /var/lib/gems/1.9.1/gems/eventmachine-1.0.7/lib/eventmachine.rb:1535:in `block in klass_from_handler'
     # /var/lib/gems/1.9.1/gems/eventmachine-1.0.7/lib/eventmachine.rb:1535:in `initialize'
     # /var/lib/gems/1.9.1/gems/eventmachine-1.0.7/lib/eventmachine.rb:1535:in `new'
     # /var/lib/gems/1.9.1/gems/eventmachine-1.0.7/lib/eventmachine.rb:1535:in `klass_from_handler'
     # /var/lib/gems/1.9.1/gems/eventmachine- 1.0.7/lib/eventmachine.rb:867:in `open_datagram_socket'
     # ./lib/rppc/net/receiver.rb:9:in `block in initialize'
     # /var/lib/gems/1.9.1/gems/eventmachine-1.0.7/lib/eventmachine.rb:187:in `call'
     # /var/lib/gems/1.9.1/gems/eventmachine-1.0.7/lib/eventmachine.rb:187:in `run_machine'
     # /var/lib/gems/1.9.1/gems/eventmachine-1.0.7/lib/eventmachine.rb:187:in `run'
     # ./lib/rppc/net/receiver.rb:8:in `initialize'
     # ./spec/net/receiver_spec.rb:6:in `new'
     # ./spec/net/receiver_spec.rb:6:in `block (2 levels) in <top (required)>'

我对 ruby 环境很陌生,所以如果我遗漏了什么,请告诉我。

我不确定您使用的是什么文档,但 open_datagram_socket 似乎需要 Module 并且不能接受 Class 作为第三个(处理程序)参数.

根据 http://www.rubydoc.info/github/eventmachine/eventmachine/EventMachine.open_datagram_socket 中的评论,似乎此限制在 EventMachine

的更高版本中可能已放宽