2014-01-27 2 views
0

Рубин прикручивает меня, кажется. Это или RubyMine. Итак, я создал класс под названием NetworkDaemon и связанную с ним спецификацию в NetworkDaemonSpecification. Довольно просто.Не может «потребовать()« определенные пакеты ядра?

Однако проблема заключается в том, что я не могу использовать require 'tcp_server' от network_daemon.rb, но могу от network_daemon_specification.rb.

Если я пробую и ссылку tcp_server из network_daemon.rb (который протестирован в network_daemon_specification.rb, я получаю следующее StackTrace

E:/Ruby200/lib/ruby/2.0.0/rubygems/core_ext/kernel_require.rb:53:in `require': cannot load such file -- tcp_server (LoadError) 
    from E:/Ruby200/lib/ruby/2.0.0/rubygems/core_ext/kernel_require.rb:53:in `require' 
    from E:/Ruby/RubyCraft/network/network_daemon.rb:1:in `<top (required)>' 
    from E:/Ruby200/lib/ruby/2.0.0/rubygems/core_ext/kernel_require.rb:53:in `require' 
    from E:/Ruby200/lib/ruby/2.0.0/rubygems/core_ext/kernel_require.rb:53:in `require' 
    from E:/Ruby/RubyCraft/specification/network_daemon_specification.rb:1:in `<top (required)>' 
    from -e:1:in `load' 
    from -e:1:in `<main>' 

Однако, я могу сослаться tcp_server в network_daemon_specification просто отлично, что происходит на D:.?

network_daemon.rb

require 'tcp_server' 

module RubyCraft 
    module Network 
    # The network daemon controls the listening and responses 
    class NetworkDaemon 
     attr_reader :port 
     # Creates the NetworkDaemon from the given port 
     # @param [Fixnum] port 
     def initialize port 
     @port = port 
     @sock = TCPServer.new @port 
     end 

     # Closes the NetworkDaemon 
     def close 
     @sock.close 
     end 
    end 
    end 
end 

network_daemon_specification.rb

# Unit tests for the Network Daemon that will be used to listen for connections 
module RubyCraft 
    module Specifications 
    class NetworkDaemonSpecification < Test::Unit::TestCase 
     def setup 
     @port = 9999 
     @daemon = NetworkDaemon.new @port 
     end 

     def test_port_should_equal_injected_port 
     assert_equal @daemon.port, @port 
     end 

     def teardown 
     @daemon.close 
     end 
    end 
    end 
end 

ответ

0

Вы должны require 'socket' не tcp_server

Проверьте документацию TCPServer для получения дополнительной информации http://www.ruby-doc.org/stdlib-1.9.3/libdoc/socket/rdoc/TCPServer.html

+0

RubyMine вводит меня в заблуждение. ._. –

+0

Как вы знаете, что вы можете потребовать его из файла спецификации? Используете ли вы этот файл или загружаете его при загрузке приложения? Если нет, то требование в файле спецификации никогда не будет запущено, и вы никогда не увидите ошибку. –

+0

Потому что я загрузил его в файл спецификации и ввел экземпляр TCPServer просто в мой конструктор NetworkDaemon. –

0

Оказывается tcp_server не то, что вам нужно требовать (несмотря на то, что говорит RubyMine) - вы должны требовать socket

Смежные вопросы