Rspec和Sinatra只是对我不起作用,但我希望他们这样做

The*_*tix 1 ruby rspec sinatra

我以前从未使用过Sinatra,也从来没有手动配置过Rspec(总是使用Rails的预写脚本),但是我想尝试一下。

但是我遇到了麻烦,我设法使RSpec可以工作,但是我遇到了错误,只是让它识别Sinatra的方法。

我想知道改用它是否更好Rack::Test

我当前的问题是atm:

1)rake失败Don't know how to build task 'default'

2)当我使用rspec它失败与undefined method get for #<RSpec::ExampleGroups::MySinatraApplication:0

现在显然我在做错事,但是我不知道该怎么办。我正在跟踪一些发现的问题,但是很好,我只是做得不好。

RakeFile:

require 'rspec/core/rake_task'


RSpec::Core::RakeTask.new do |task|
  task.rspec_opts = ['-c', '-f progress', '-r ./spec/spec_helper.rb']
  task.pattern = './spec/**/*_spec.rb'
end
Run Code Online (Sandbox Code Playgroud)

spec_helper.rb

require 'rspec'
require 'rack/test'

RSpec.configure do |conf|
  conf.include Rack::Test::Methods
end
Run Code Online (Sandbox Code Playgroud)

app_spec.rb

ENV['RACK_ENV'] = 'test'

require '../../myapp'
require 'rspec'
require 'rack/test'

describe 'My Sinatra Application' do

  include Rack::Test::Methods

  def app
    Sinatra::Application
  end

  it "says hello" do
    get '/' do
      expect(last_response).to be_ok
      expect(last_response.body).to eq('Hello World')
    end
  end


  it 'should allow access to main page' do

  end

  it 'should list every site from the links file' do
    # get '/' do
    #   Links.each do |link|
    #
    #   end
    # end
  end

end
Run Code Online (Sandbox Code Playgroud)

第一次编辑:

myapp.rb

require 'dotenv'
Dotenv.load
require 'yaml'
require 'sinatra'
require 'helpers'
require 'actions'
require 'main'
Run Code Online (Sandbox Code Playgroud)

main.rb

class Ops_JustGiving < Sinatra::Base
  Links = YAML::Load(File.open('..\\links.yml'))['sites']
  set :root, File.dirname __FILE__

  helpers Sinatra::Ops_JustGiving::Helpers

  register Sinatra::Ops_JustGiving::Actions

end
Run Code Online (Sandbox Code Playgroud)

Ant*_*ony 5

您的规范助手实际上应该是:

require 'rspec'
require 'rack/test'

RSpec.configure do |conf|
  conf.include Rack::Test::Methods
end
Run Code Online (Sandbox Code Playgroud)

然后在您的个别测试中:

ENV['RACK_ENV'] = 'test'

require 'hello_world'  # <-- your sinatra app name
require 'rspec'
require 'rack/test'

describe 'My Sinatra Application' do
  include Rack::Test::Methods  #<---- you really need this mixin

  def app
    Sinatra::Application
  end

  it "says hello" do
    get '/'
    expect(last_response).to be_ok
    expect(last_response.body).to eq('Hello World')
  end
end
Run Code Online (Sandbox Code Playgroud)

使该工作正常进行,然后可以在添加更多测试时进行重构。

  • 我的编辑怎么了?无论如何,我问的问题有两个方面,第一个是为什么我的`rake`不能正常工作,我通过删除一行代码来修复它,现在`rake`可以工作了。同样,刚刚找到了另一个问题的解决方案,`Sinatra :: Application`应该是`@app = AppName`。西尔,您确实提供了帮助,谢谢。 (2认同)