SinatraアプリにRSpecを導入する
2022/03/17
おうちハックで使っているSinatraで作ったちょっとしたAPIにRSpecを導入した
SinatraにRSpecを導入する記事がそんなに多くなく、どのやり方が正解かわからなかった
もちろん正解なんて存在しないけど、自分なりの最小限の導入方法がわかったので記録しておく
サンプルとして、「Hello World!」を返すAPIを用意した
このAPIのテストを書いていく
require 'sinatra'
get '/' do
"Hello World!\n"
end
$ curl localhost:4567
Hello World!
手順
Gemを追加
test グループに rspec と rack-test のGemを追記する
group :test do
gem 'rspec'
gem 'rack-test'
end
bundle install を忘れない
RSpecの初期化
$ bundle exec rspec --init
create .rspec
create spec/spec_helper.rb
.rspec と spec/spec_helper.rb が生成される
RSpecの設定
生成された spec/spec_helper.rb に追記する
spec/spec_helper.rb
+ENV['APP_ENV'] = 'test'
+require 'sinatra'
+require 'rspec'
+require 'rack/test'
RSpec.configure do |config|
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
config.shared_context_metadata_behavior = :apply_to_host_groups
+ config.include Rack::Test::Methods
+ def app
+ Sinatra::Application
+ end
end
テストを追加
spec/app_spec.rb
require './app'
RSpec.describe 'app' do
it 'says Hello World!' do
get '/'
expect(last_response.status).to eq 200
expect(last_response.body).to eq "Hello World!\n"
end
end
- ステータスコードが 200 になっているか
- レスポンスボティが Hello World!\n になっているか
を確認するテストを書いた
テストを実行
$ bundle exec rspec
.
Finished in 0.02466 seconds (files took 0.72422 seconds to load)
1 example, 0 failures
良きね