如何在 Sinatra 中运行测试?

发布于 2024-08-17 12:17:07 字数 110 浏览 2 评论 0 原文

我不知道如何测试我的 Sinatra 应用程序。我只是运行

ruby

​​ 这似乎不起作用。那里的所有文件只讨论如何写入文件的内容,而不讨论如何运行它。

谢谢

I have no idea how to test my Sinatra application. Do I just run

ruby

That does not seem to work. All files out there only talk about how to write the contents of the file, but not about how to get it running.

Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

不可一世的女人 2024-08-24 12:17:07

应该很简单。

给定 my_app.rb:

require 'rubygems' # Required only for Ruby version prior to 1.9
require 'sinatra'

get '/hi' do
  'Hello World!'
end

和 my_app_test.rb:

require 'my_app'
require 'test/unit'
require 'rack/test'

set :environment, :test

class MyAppTest < Test::Unit::TestCase
  include Rack::Test::Methods

  def app
    Sinatra::Application
  end

  def test_hi_returns_hello_world
    get '/hi'
    assert last_response.ok?
    assert_equal 'Hello World!', last_response.body
  end
end

您应该确保安装了正确的 gem:

gem install sinatra rake rack-test

现在您可以运行您的应用程序并进行测试,如下所示:

ruby my_app.rb
ruby my_app_test.rb

Should be simple enough.

Given my_app.rb:

require 'rubygems' # Required only for Ruby version prior to 1.9
require 'sinatra'

get '/hi' do
  'Hello World!'
end

And my_app_test.rb:

require 'my_app'
require 'test/unit'
require 'rack/test'

set :environment, :test

class MyAppTest < Test::Unit::TestCase
  include Rack::Test::Methods

  def app
    Sinatra::Application
  end

  def test_hi_returns_hello_world
    get '/hi'
    assert last_response.ok?
    assert_equal 'Hello World!', last_response.body
  end
end

You should make sure you have right gems installed:

gem install sinatra rake rack-test

Now you can run your application and tests like this:

ruby my_app.rb
ruby my_app_test.rb
徒留西风 2024-08-24 12:17:07

我发布了一个基于 小示例。 com/a/2060931/4794">psyho 的回答。我还添加了 ActiveRecord 支持,包括测试装置。

我配置了 rake 来运行测试:

# Rakefile
require_relative './app'
require 'rake'
require 'rake/testtask'
require 'sinatra/activerecord/rake'

Rake::TestTask.new do |t|
  t.pattern = "test/**/*_test.rb"
end

task default: :test

现在我可以像这样运行测试:

rake

示例测试如下所示:

require_relative '../test_helper'

class BlogTest < ActiveSupport::TestCase
  fixtures :blogs

  def test_create
    blog = Blog.create(:name => "Rob's Writing")
    assert_equal "Rob's Writing", blog.name
  end

  def test_find
    blog = Blog.find_by_name("Jimmy's Jottings")
    assert_equal "Stuff Jimmy says", blog.tagline
  end
end

我在每个测试文件中都需要这个助手来连接所有内容:

# test_helper.rb
require_relative '../app'
require 'minitest/autorun'
require 'active_record'
require 'rack/test'

ActiveRecord::Base.establish_connection(:test)

#Set up fixtures and such
class ActiveSupport::TestCase
  include ActiveRecord::TestFixtures
  include ActiveRecord::TestFixtures::ClassMethods
  include Rack::Test::Methods

  def app
    Sinatra::Application
  end

  self.fixture_path = 'test/fixtures'
  self.use_transactional_fixtures = true
  self.use_instantiated_fixtures  = false
end

I posted a small example based on psyho's answer. I also added ActiveRecord support, including test fixtures.

I configured rake to run the tests:

# Rakefile
require_relative './app'
require 'rake'
require 'rake/testtask'
require 'sinatra/activerecord/rake'

Rake::TestTask.new do |t|
  t.pattern = "test/**/*_test.rb"
end

task default: :test

Now I can run the tests like this:

rake

An example test looks like this:

require_relative '../test_helper'

class BlogTest < ActiveSupport::TestCase
  fixtures :blogs

  def test_create
    blog = Blog.create(:name => "Rob's Writing")
    assert_equal "Rob's Writing", blog.name
  end

  def test_find
    blog = Blog.find_by_name("Jimmy's Jottings")
    assert_equal "Stuff Jimmy says", blog.tagline
  end
end

I require this helper in every test file to wire everything up:

# test_helper.rb
require_relative '../app'
require 'minitest/autorun'
require 'active_record'
require 'rack/test'

ActiveRecord::Base.establish_connection(:test)

#Set up fixtures and such
class ActiveSupport::TestCase
  include ActiveRecord::TestFixtures
  include ActiveRecord::TestFixtures::ClassMethods
  include Rack::Test::Methods

  def app
    Sinatra::Application
  end

  self.fixture_path = 'test/fixtures'
  self.use_transactional_fixtures = true
  self.use_instantiated_fixtures  = false
end
懒的傷心 2024-08-24 12:17:07

下面是一个 Sinatra 应用程序和使用 Minitest 编写的集成(或端到端)测试的示例:

app.rb

# frozen_string_literal: true

require 'sinatra'

get '/' do
  'test'
end

test/integration_test.rb

# frozen_string_literal: true

ENV['APP_ENV'] = 'test'

require 'minitest/autorun'
require 'rack/test'
require 'app'

class IntegrationTest < Minitest::Test
  include Rack::Test::Methods

  def test_request_succeeds
    get '/'
    assert last_response.ok?
    assert_equal 'test', last_response.body
  end

  private

  def app
    Sinatra::Application
  end
end

要运行测试配置测试 rake 任务并运行rake test

Below is an example of a Sinatra application and an integration (or end-to-end) test written using Minitest:

app.rb:

# frozen_string_literal: true

require 'sinatra'

get '/' do
  'test'
end

test/integration_test.rb:

# frozen_string_literal: true

ENV['APP_ENV'] = 'test'

require 'minitest/autorun'
require 'rack/test'
require 'app'

class IntegrationTest < Minitest::Test
  include Rack::Test::Methods

  def test_request_succeeds
    get '/'
    assert last_response.ok?
    assert_equal 'test', last_response.body
  end

  private

  def app
    Sinatra::Application
  end
end

To run the tests configure the test rake task and run rake test.

放飞的风筝 2024-08-24 12:17:07

应该像ruby your_app_name.rb一样简单。实际上,这显示在 Sinatra 主页(底部)上。

Should be as simple as ruby your_app_name.rb. Actually, this is shown on Sinatra homepage (bottom).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文