query: tag:spec

Merbのプラグインを作る場合、merb-gen plugin plugin-name でひな形が生成されますが、現状では生成されるspecがほとんど空っぽなので、
ちゃんとしたspecを書くための足場の作り方を紹介します。

まずは、spec/spec_helper.rb を以下のような感じに準備します
(これはdm-has-versionsの例です)

ruby>>
$:.push File.join(File.dirname(FILE), '..', 'lib')

require 'rubygems'
require 'merb-core'
require 'dm-core'
require "spec"
require 'dm-has-versions/has/versions'
require 'dm-aggregates'

DataMapper::Model.append_extensions DataMapper::Has::Versions
Merb.disable(:initfile)
Merb.start_environment(
:testing => true,
:adapter => 'runner',
:environment => ENV['MERB_ENV'] || 'test',
:merb_root => File.dirname(FILE) / 'fixture',
:log_file => File.dirname(FILE) / "merb_test.log"
)
DataMapper.setup(:default, "sqlite3::memory:")

Spec::Runner.configure do |config|
config.include(Merb::Test::ViewHelper)
config.include(Merb::Test::RouteHelper)
config.include(Merb::Test::ControllerHelper)

DataMapper.auto_migrate!
end
<<--

この例では、DataMapperを使う事を前提としています。
"sqlite3::memory:" を指定することで、テストのための
データベースファイルなどを用意する必要がないので楽です。

テストで利用されるクラス群は、spec/fixture 以下に、
通常のMerbアプリケーションと同様のディレクトリ階層で用意します。

pre>>
% tree spec/fixture [~/project/dm-has-versions:master]
spec/fixture
-- app -- models
|-- comment.rb
`-- story.rb
<<--

posted by genki genki on Fri 16 Jan 2009 at 12:16 with 0 comments

merb-auth-slice-passwordは、merb-gen appがデフォルトで生成する認証機能ですが、これを使ってログインが必要なアクションを作ると、デフォルトのrequest specでエラーが出るようになります。

そのような場合には、spec_helper.rbの中で、
以下のようなヘルパーを用意すると良いようです。

ruby>>
Merb::Test.add_helpers do
def create_default_user
unless User.first(:login => "krusty")
User.create( :login => "krusty",
:password => "klown",
:password_confirmation => "klown") or raise "can't create user"
end
end

def login
create_default_user
request("/login", {
:method => "PUT",
:params => {
:login => "krusty",
:password => "klown"
}
})
end
end
<<--

See Also

posted by genki genki on Wed 14 Jan 2009 at 11:04 with 0 comments

MerbではRSpecを使ってテストをするのが標準構成になっていますが、
merb-genが生成したアプリケーションのひな形では、
rake specの実行結果は色付きにはなっていません。
これを色付きにするためには、
spec/spec.optsの中で以下のように設定します。

spec/spec.opts

pre>>
--color
<<--

これだけです。

posted by genki genki on Mon 1 Dec 2008 at 15:41 with 8 comments

テストのC0カバレッジを上げるために、
何度もrcovを手で実行していたのですが、
テストの数が多くなってくると非常に時間がかかって面倒なため、
自動化するRakeタスクを作りました。

ruby>>
namespace :rcov do
desc 'Automate rcov'
task :auto do
interval = (ENV['INTERVAL'] || 10).to_f
org_path = File.join(RAILS_ROOT, 'coverage', '*')
pub_path = File.join(RAILS_ROOT, 'public', 'coverage')
sh "mkdir -p #{pub_path}"
loop do
Rake::Task['spec:rcov'].execute nil
sh "cp -Rf #{org_path} #{pub_path}"
sleep interval
end
end
end
<<--

使い方はRAILS_ROOTで以下のコマンドを実行するだけです。

pre>>
% rake rcov:auto INTERVAL=10
<<--

指定した時間間隔(秒)ごとにspec:rcovを実行します。
実行した結果はRSpecのデフォルトでは
RAILS_ROOT/coverageに出力されるので、これを
public/coverageに上書きコピーしています。
あとは、ブラウザで/coverageを見ればOKです。

public/coverageは間違ってデプロイしないように.gitignoresvn:ignoreに登録しておきましょう。

posted by genki genki on Sat 5 Jul 2008 at 03:53 with 0 comments