テストを実施すると必要になってくるコードカバレッジ。
今回は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 件のコメント:
コメントを投稿