LoginSignup
8
7

More than 5 years have passed since last update.

sinatraなアプリケーションをminitestするための下準備

Last updated at Posted at 2016-09-04
1 / 15

Ruby2.3のbundler環境でsinatraをminitestするための下準備

Sinatraをテストするための情報収集をしているのですが、古い情報そのままだと動きません。

なので、いくつかメモ的に情報を残していきます。


前提

2016/9/4 に検証

環境は以下のとおり

  • rbenv 1.0.0
  • Ruby 2.3.1
  • bundler 1.12.5

手順

  1. 適当なディレクトリを作る
  2. bundle init
  3. Gemfileを編集
  4. bundle install
  5. アプリケーションを書く
  6. テストを書く
  7. テストを実行する

Gemfile

以下をGemfileに追記

Gemfile
gem "sinatra"
gem "minitest"
gem "rack-test"

minitestは標準ライブラリとしてインストールされていますが、bundler環境では標準ライブラリを無視するっぽいので明示的にインストール


rackアプリをテストするためのツールはrackに入っていると思いきや、結構昔にrack-testに切り出されているらしいので、rack-testをインストールしてあげます。


以下を実行すると

bundle install --path=vendor/bundle

以下の様な、Gemfile.lockが生成されました。

Gemfile.lock
GEM
  remote: https://rubygems.org/
  specs:
    minitest (5.9.0)
    rack (1.6.4)
    rack-protection (1.5.3)
      rack
    rack-test (0.6.3)
      rack (>= 1.0)
    sinatra (1.4.7)
      rack (~> 1.5)
      rack-protection (~> 1.4)
      tilt (>= 1.3, < 3)
    tilt (2.0.5)

PLATFORMS
  ruby

DEPENDENCIES
  minitest
  rack-test
  sinatra

BUNDLED WITH
   1.12.5

テスト対象のアプリ

app.rbに対して以下を記述

app.rb
require "sinatra"

get "/" do
  "Hello World"
end

テストファイルのテンプレート

test_app.rbに以下を記述

test_app.rb

require './app'
# require "test/unit" <- 今回はminitestを使うのでコメントアウト
require 'minitest/autorun'
require 'rack/test'

ENV['RACK_ENV'] = 'test'

# class HelloWorldTest < MiniTest::Unit::TestCase <- こいつだと動くけど警告が出る
class HelloWorldTest < MiniTest::Test
  include Rack::Test::Methods

  def app
    Sinatra::Application
  end

  def test_it_says_hello_world
    get '/'
    assert last_response.ok?
    assert_equal 'Hello World', last_response.body
  end
end

実行

以下を実行すると

bundle exec ruby test_app.rb

以下のように標準出力される

Run options: --seed 15648

# Running:

.

Finished in 0.015177s, 65.8913 runs/s, 131.7825 assertions/s.

1 runs, 2 assertions, 0 failures, 0 errors, 0 skips

テストを書くための参考になりそうなページ


参考情報

8
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
7