我刚刚切换到Sinatra进行项目,我的项目只是:
/lib
/test
config.ru
Gemfile
在我的config.ru文件中,我有:
require 'rubygems'
require 'bundler'
Bundler.setup unless File.exists?(File.expand_path('../.bundle/environment', __FILE__))
Bundler.require(:default)
Dir.glob File.dirname(__FILE__) + '/lib/*.rb', &method(:require)
run HandHistoryParser
似乎加载,并且运行rackup启动服务器没有错误。但我有一个简单的测试脚本来测试输出,当脚本创建HandHistoryParser时,如
@file_reader = HandHistoryParser::FileReader.new("bulk_hands")
我收到此错误:
in `<main>': uninitialized constant Object::HandHistoryParser (NameError)
出于某种原因,我无法要求库文件,即使它在irb中有两种要求:
require './lib/hand_history_parser'
require '../../lib/hand_history_parser
我错过了什么?
答案 0 :(得分:0)
您的错误消息表明这可能是范围问题。在中,模块和类常量正在定义,依此类推,但自我设置为main /全局范围以外的其他东西。
尝试更改此内容:
Dir.glob File.dirname(__FILE__) + '/lib/*.rb', &method(:require)
要:
Dir[__FILE__ + '/../lib/*.rb'] { |file| require file }
答案 1 :(得分:0)
等等......测试脚本是什么意思 我们正在使用机架/测试权
IMHO 如果,一个sinatra应用程序将更加测试友好 您的主应用程序类可以独立于config.ru启动
这样您就可以在测试文件中只需要'rack / test'和'app.rb'