在Sinatra应用程序中运行rspec只是启动服务器

时间:2014-03-09 06:15:37

标签: ruby rspec sinatra

我正在使用rspec来测试我的Sinatra应用程序。该应用程序非常简单,测试也是如此,但是当我从CLI运行rspec时,它只是启动应用程序服务器。我从未发生过这种情况。

这是spec_helper.rb的样子:

#spec/spec_helper.rb
require File.expand_path '../../app.rb', __FILE__

ENV['RACK_ENV'] = "test"

require 'rspec'
require 'rack/test'

set :environment, :test
set :run, false
set :raise_errors, true
set :logging, false

module RSpecMixin
  def app
    App.new
  end
end

RSpec.configure do |config|
  config.color_enabled = true
  config.tty = true
  config.formatter = :documentation
  config.include Rack::Test::Methods
  config.include RSpecMixin
end

我的规格只是

require 'spec_helper'

describe "My Sinatra Application" do
  it "should allow accessing the home page" do
    expect(1).to eq(1)
  end
end

我无法让rspec运行。

我尝试了什么:

我已尝试过Sinatra testing guide中的建议。还有rspec Sinatra test recipe。在this blog post中,set :run, false看起来很有希望,但没有骰子。然后我想,我只会define a rake task。将rspec gem放入test组并设置RACK_ENV进行测试。所有这些只是启动应用服务器:

$ rake spec
[2014-03-08 22:06:38] INFO  WEBrick 1.3.1
[2014-03-08 22:06:38] INFO  ruby 2.0.0 (2013-02-24) [x86_64-darwin11.4.2]
== Sinatra/1.4.4 has taken the stage on 4567 for development with backup from WEBrick
[2014-03-08 22:06:38] INFO  WEBrick::HTTPServer#start: pid=21538 port=4567

HALP?

3 个答案:

答案 0 :(得分:1)

尝试从new()

中删除def app
module RSpecMixin
  def app
    App
  end
end

答案 1 :(得分:1)

另一种创建应用程序以进行测试的方法是:

APP = Rack::Builder.parse_file('config.ru').first

module RSpecMixin
  def app
    APP
  end
end

明显这只适用于你使用config.ru。

答案 2 :(得分:1)

我找到了答案。这很令人尴尬,但我在我最喜欢的modular and classic style决定之间来回切换,我在App.run!文件的底部留下了错误的app.rb电话。