【发布时间】:2016-05-25 01:32:29
【问题描述】:
在我将其重构为多个控制器/服务器之前,我的应用程序一切正常。
我相信我正在使用 Sinatra-Base 的模块化设置。我相信我已经正确定义了我的 Rack ENV。
我有问题。如果不在命令行中启动 Sinatra,我将无法运行 rspec。 当我通过注释掉“运行!”来解决这个问题时我的服务器文件底部的命令,当我尝试从命令行运行我的应用程序时,显然 Sinatra 不会启动。
这是我的文件结构:
app
app.rb
server.rb
datamapper_setup.rb
controllers
new_users.rb
sessions.rb
views
various.erb
files.erb
models
user.rb
spec
features
feature_test_spec.rb
other_feature_test_spec.rb
units
unit_test_spec.rb
spec_helper.rb
config.ru
.rspec
Gemfile
Rakefile
这是我的 config.ru 文件
require './app/app.rb'
run MyApp
这是我的 app.rb 文件
ENV['RACK_ENV'] ||= 'development'
require 'rack'
require 'sinatra/base'
require 'sinatra/flash'
require 'sinatra/partial'
require_relative 'data_mapper_setup'
require_relative 'server'
require_relative 'controllers/new_users'
require_relative 'controllers/sessions'
这是我的服务器文件
class App < Sinatra::Base
register Sinatra::Flash
register Sinatra::Partial
enable :sessions
set :session_secret, 'super secret'
set :partial_template_engine, :erb
helpers do
def session_user
@session_user ||= User.get(session[:user_id])
end
end
get '/' do
@new_user = User.new
erb :'user/index'
end
#Here is where I am commenting out run! in order to be able to run rspec without starting Sinatra.
# It doesn't work at all if I have => run! if app_file == $0 now, but used to work before the refactor when this line was in my app file.
run!
end
在我的规范助手中:
ENV['RACK_ENV'] = 'test'
require File.join(File.dirname(__FILE__), '..', 'app/app.rb')
require './app/app.rb'
require 'capybara'
require 'capybara/rspec'
require 'rspec'
require 'database_cleaner'
require 'coveralls'
require 'simplecov'
require './app/data_mapper_setup.rb'
require './spec/web_helpers.rb'
SimpleCov.formatters = [
SimpleCov::Formatter::HTMLFormatter,
Coveralls::SimpleCov::Formatter
]
Coveralls.wear!
Capybara.app = App
RSpec.configure do |config|
config.include SessionHelpers
config.before(:suite) do
DatabaseCleaner.strategy = :transaction
DatabaseCleaner.clean_with(:truncation)
end
config.before(:each) do
DatabaseCleaner.start
end
config.after(:each) do
DatabaseCleaner.clean
end
config.include Capybara::DSL
config.expect_with :rspec do |expectations|
expectations.include_chain_clauses_in_custom_matcher_descriptions = true
end
config.mock_with :rspec do |mocks|
mocks.verify_partial_doubles = true
end
end
我所有的 rspec 测试都通过了。
我尝试过的...
- 各种不同的 config.ru 设置
- Spec_helper 与 require 'rack' 不同
- 检查我的机架环境在我的数据库中是隔离的
- 试图了解 Sinatra 模块化和 Sinatra 古典风格之间的区别(成功有限)
【问题讨论】:
-
您能否详细说明为什么首先需要致电
run!?当你把它注释掉时,你不能做什么? -
嗨@georgebrock - 需要运行!能够从我的命令行运行 Sinatra 并访问我的 localhost 端口。但是,在我每次运行测试时,都会导致 Rspec 运行 Sinatra。
标签: ruby rspec sinatra rack env