テストを実施すると必要になってくるコードカバレッジ。
今回はRuby 1.9で使用できるSimpleCovを使用します。
Gemfile
source :rubygems gem 'sinatra', require: 'sinatra/base' gem 'slim' gem 'sass' gem 'unicorn' gem 'mongoid' gem 'bson_ext' group :development do gem 'sinatra-reloader', require: 'sinatra/reloader' end group :test do gem 'rspec' gem 'rack-test', require: 'rack/test' gem 'guard-rspec' gem 'simplecov', require: false end
spec/sepc_helper.rb
require 'bundler/setup' Bundler.require :default, :test require 'simplecov' SimpleCov.start require 'app' require 'models' RSpec.configure do |config| config.include Rack::Test::Methods end
$ bundle install $ bundle exec guardこれでテストするたびにカバレッジを計測することができます。なお、前回のソースだと
Coverage report generated for RSpec to /home/kan/workspace/template/coverage. 22 / 23 LOC (95.65%) covered.と表示されて100%に達していません。
coverageディレクトリ以下に結果のhtmlが生成されているので確認してみると、app.rbのget '/css/:file.css'...のブロックがテストされていないことがわかります。
簡単なテストを追加してみます。
spec/app_spec.rb
require 'spec_helper'
shared_examples_for "response code" do
it { should be_ok }
end
describe MyApp do
def app
@app ||= MyApp
end
context "when get '/'" do
before do
get '/'
end
subject { last_response }
it_behaves_like "response code"
its(:body) { should include("Hello World!") }
end
context "when get '/css/style.css'" do
before do
get '/css/style.css'
end
subject { last_response }
it_behaves_like "response code"
end
describe "MongoDB access" do
before do
Game.destroy_all if Game.exists?
Game.create(title: "GOD EATER BURST", platform: "PSP")
end
context "when get '/games/title'" do
before { get 'games/title' }
subject { last_response }
its(:body) { should == "GOD EATER BURST" }
end
context "when get '/games/platform'" do
before { get 'games/platform' }
subject { last_response }
its(:body) { should == "PSP" }
end
end
end
再度テストを実行すると、カバレッジが100%に達すると思います。
0 件のコメント:
コメントを投稿