TypeError:rspec中错误的参数类型类(预期模块)

时间:2015-05-24 19:05:35

标签: ruby rspec tdd

我正在开发一个简单的网络应用程序(打包为宝石)来学习Ruby和TDD。 我有这门课(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)>'

我对红宝石环境很陌生,所以如果我错过了什么让我知道。

1 个答案:

答案 0 :(得分:0)

我不确定您正在使用哪些文档,但open_datagram_socket需要Module并且不能接受Class作为第三个(处理程序)争论。

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

的更高版本中放宽了此限制