ラベル plugin の投稿を表示しています。 すべての投稿を表示
ラベル plugin の投稿を表示しています。 すべての投稿を表示

2014/08/03

Redmineプラグイン開発における ActiveModel 使用上の注意点

先のエントリ: tail -f pinzo.log: ActiveSupport::Concern の included と ClassMethods の順序 に関連してます。

Redmine のプラグインでちょっと凝ったことをしようとすると、ActiveModel を使いたくなることがある。
ActiveModel のメリットの一つに ActiveRecord と同様のバリデーションを手軽に定義できることがある。
しかし、Redmine 本体の locales/ja.yml には ActiveModel の設定は入っていないので、プラグインの locales/ja.yml に書くことになる。
その際、たいてい Redmine 本体の locales/ja.yml から ActiveRecord 用の設定をコピーしてくることになりがち。 こんな感じに。

ここまではいい。

問題は、ここからちょいと修正を入れてしまうことにある。
ちょっと文言をいじってしまうと ActiveModel のデフォルトの文言を上書きするということになる。
これを複数プラグインでやってしまった場合、さてあなたのプラグインではどんなエラーが表示されるだろう?
これらの辞書ファイルはマージされるので、ロード順や入れてあるプラグインの状態により変わってしまい想定できなくなる。
文言をテストで使用していたりしたら、テストが失敗してしまう。
それを避けるためにも、先のエントリで書いたようなテクニックを利用して、自分のプラグインの ActiveModel が使用するセクションを独立させてあげよう。
こんな感じに。(my_plugin 部分にはあなたのプラグインの一意な識別子を指定しましょう。)

それでは、今日もよい日曜開発を

2014/06/18

redmine_reminderz

pinzolo/redmine_reminderz という Redmine のプラグインを作った。
Redmineには締め切りの近いチケットを通知する redmine:send_reminders というRakeタスクがあるが、今のプロジェクトでは進捗率80%以上のチケットはレビュー待ちなので担当者にリマインダーとして送りたくないらしい。
多分 Redmine の運用方針を変えればカバーできる話だが、Redmineをそんなにガシガシと使いこなしているわけでもないし、プロジェクト的にそこまでの余裕もない。
というわけで、進捗率でフィルタできるオプションを追加したタスクをプラグインとして作成した。
タスク名を redmine:send_reminders から redmine:send_reminderz に変更するだけ(最後のsをz)
既存のオプションはそのまま使えて、進捗率を >, >=, <, <= でフィルタするオプションが指定できる。

開発30分、目視確認30分の突貫作業だったので、まだテストもないし、設計もよろしくない。
既存のタスクに独自オプションによる処理を差し込む方法が思いつかず丸々コピーしてしまった。
redmineから始まるタスク名もあまり良くないなとちょっと後悔している。そのうち別名でも用意する。
とまあ、だいぶ中途半端な出来だけど、せっかくなので公開しておく。
テスト、オプションの充実、締め切り通知以外のリマインダーの追加などできる事は結構あると思うので、ゆっくり育てます。

2014/06/13

Redmine のプラグインを RSpec3 でテスト出来ない

pinzolo/redmine_persist_wfmt を RSpec3 に対応しようとしてみたが実行すら出来なかった。
/Users/pinzolo/projects/redmine/persist_wfmt/redmine-2.5.1/vendor/bundle/ruby/2.1.0/gems/rspec-support-3.0.0/lib/rspec/support/version_checker.rb:28:in `raise_too_low_error': You are using capybara 2.1.0. RSpec requires version >= 2.2.0. 
(RSpec::Support::LibraryVersionTooLowError)
        from /Users/pinzolo/projects/redmine/persist_wfmt/redmine-2.5.1/vendor/bundle/ruby/2.1.0/gems/rspec-support-3.0.0/lib/rspec/support/version_checker.rb:18:in `check_version!'
        from /Users/pinzolo/projects/redmine/persist_wfmt/redmine-2.5.1/vendor/bundle/ruby/2.1.0/gems/rspec-rails-3.0.1/lib/rspec/rails/vendor/capybara.rb:13:in `'
        from /Users/pinzolo/projects/redmine/persist_wfmt/redmine-2.5.1/vendor/bundle/ruby/2.1.0/gems/activesupport-3.2.17/lib/active_support/dependencies.rb:251:in `require'
        from /Users/pinzolo/projects/redmine/persist_wfmt/redmine-2.5.1/vendor/bundle/ruby/2.1.0/gems/activesupport-3.2.17/lib/active_support/dependencies.rb:251:in `block in require'
        from /Users/pinzolo/projects/redmine/persist_wfmt/redmine-2.5.1/vendor/bundle/ruby/2.1.0/gems/activesupport-3.2.17/lib/active_support/dependencies.rb:236:in `load_dependency'
        from /Users/pinzolo/projects/redmine/persist_wfmt/redmine-2.5.1/vendor/bundle/ruby/2.1.0/gems/activesupport-3.2.17/lib/active_support/dependencies.rb:251:in `require'
        .... and more
Redmine 本体の Gemfile で gem "capybara", "~> 2.1.0" なのだが、RSpec3 で Capybara を使用するには 2.2.0 以上を要求される。
このエラーは実行時でなく事前チェックで投げられているようで、 Capybara をプラグインのテストで使用していなくても出る。
さすがに本体のバージョンを無視するわけにはいかないので、当分は gem "rspec", "~> 2.14.0" で行こうと思う。
というか、やっぱりこういうのを避けるためには ActiveSupport::TestCase で書いたほうがいいんだろうな。

2014/05/18

RedmineでMarkdownに切り替えやすくするプラグインを作った

tail -f pinzo.log: Redmine がついに Markdown をサポートしたようだ で書いたように、Redmine が 2.5.0 から試験的に Markdown をサポートしたけど、過去の Textile で書いたもろもろが崩れてしまうので、気軽に乗り換えられない。
でも、やっぱり Markdown で書きたい。主流だし。
というわけで redmine_persist_wfmt というプラグインを作った。
これで少しは気軽に Markdown に切り替えられるですよ。

インストール

README.md にある通り。
$ bundle exec rake pwfmt:persist_all FORMAT=textile RAILS_ENV=production で既存のドキュメントを Textile として保存する。もちろん Markdown として保存することもできる。

イメージ

こんな風に Textile で書かれたドキュメントがあったとする。

プラグインをインストール後、Markdownを使うように変更する。

それでも Textile として変換されて表示されます。

もちろん Markdown として保存すれば

Markdown として変換されて表示されます。

作成・編集時にフォーマットを選択できるので、Textile から Markdown に直すこともできます。(もちろん逆も)

機能とメリット

  • 作成時に指定したフォーマットでずっと表示できる
  • 作成・編集時にフォーマットを指定できる(どちらかしかしらないメンバーがいても大丈夫)
  • 編集時にフォーマットを切り替えられる(統一も順次対応できる)

対応箇所

  • Redmineのウェルカムテキスト
  • プロジェクトの概要
  • チケットの概要と履歴
  • Wiki
  • 文書
  • フォーラムの本文とコメント
  • ニュース
基本的に Wiki 記法で書ける場所は全て対応したつもり

注意事項

  • ツールバーの動作は切り替わらない。Redmineの設定に従う
  • プレビューも未対応。Redmineの設定に従う → v1.1.0 で対応しました。
  • プラグインとかで追加された場所は、フォーマットを選択するドロップダウンはでるかもしれないけど書式は保存されないと思う

プレビューぐらいは対応したいけど、その前にテスト書いてリファクタリングをしたい。
似ているようで微妙に違うソースがたくさんなので、もう少し綺麗になるはず。

2013/12/08

Redmineのプラグインで既存の文言を上書きする

この情報は Redmine 2.5 で不要になりました。→ tail -f pinzo.log: Redmine 2.5.0 からプラグインでの文言上書きが復活しています

Redmine のプラグインで本体の文言を上書きすることが出来ません。
昔はできたようなのですが、バージョンが違うのか I18n の仕様が変わったのか現在は出来ません。

ja:
  project_module_documents: ドキュメント
  project_module_calendar: 日程表

プラグインの ja.yml にこんな記述をしても画面はかわりません。

通常、プラグインをロードすると、I18n.load_path はこんな状態になります。

$REDMINE_HOME/vendor/bundle/ruby/2.0.0/gems/activesupport-3.2.15/lib/active_support/locale/en.yml
$REDMINE_HOME/vendor/bundle/ruby/2.0.0/gems/activemodel-3.2.15/lib/active_model/locale/en.yml
$REDMINE_HOME/vendor/bundle/ruby/2.0.0/gems/activerecord-3.2.15/lib/active_record/locale/en.yml
$REDMINE_HOME/vendor/bundle/ruby/2.0.0/gems/actionpack-3.2.15/lib/action_view/locale/en.yml
$REDMINE_HOME/plugins/<plugin_name>/config/locales/en.yml
$REDMINE_HOME/plugins/<plugin_name>/config/locales/ja.yml
$REDMINE_HOME/config/locales/ar.yml
$REDMINE_HOME/config/locales/az.yml
$REDMINE_HOME/config/locales/bg.yml
--- 延々と Redmine 本体の言語ファイルが列挙
$REDMINE_HOME/config/locales/vi.yml
$REDMINE_HOME/config/locales/zh-TW.yml
$REDMINE_HOME/config/locales/zh.yml

rails/railties/lib/rails/engine.rb at 3-2-stable · rails/rails にあるように、I18n.load_path の後ろのほうが優先度が高いので、本体の言語ファイルのほうが優先されてしまいプラグイン側で上書きすることができません。 プラグインの登録は config/initializers/30-redmine.rb で行われていて、その際にプラグインの辞書ファイルが I18n.load_path に登録されるのですが、この時点ではアプリケーション本来の辞書ファイルが登録されていないからでしょう。

じゃあどうすればいいのかというと、どこかで I18n.load_path を調整して、プラグインの辞書ファイルを後ろの方にもっていくのがいいのかなと。
確実に行うなら、初期化完了時がよさげですね。
Rails::Engine には after_initialize という目的そのままの機能があるのでこれが使えそうです。

こんなコードを lib あたりに突っ込んでおいて、init.rbrequire すればOK。
I18n.load_path はこんな感じになります。

$REDMINE_HOME/vendor/bundle/ruby/2.0.0/gems/activesupport-3.2.15/lib/active_support/locale/en.yml
$REDMINE_HOME/vendor/bundle/ruby/2.0.0/gems/activemodel-3.2.15/lib/active_model/locale/en.yml
$REDMINE_HOME/vendor/bundle/ruby/2.0.0/gems/activerecord-3.2.15/lib/active_record/locale/en.yml
$REDMINE_HOME/vendor/bundle/ruby/2.0.0/gems/actionpack-3.2.15/lib/action_view/locale/en.yml
$REDMINE_HOME/config/locales/ar.yml
$REDMINE_HOME/config/locales/az.yml
$REDMINE_HOME/config/locales/bg.yml
--- 延々と Redmine 本体の言語ファイルが列挙
$REDMINE_HOME/config/locales/vi.yml
$REDMINE_HOME/config/locales/zh-TW.yml
$REDMINE_HOME/config/locales/zh.yml
$REDMINE_HOME/plugins/<plugin_name>/config/locales/en.yml
$REDMINE_HOME/plugins/<plugin_name>/config/locales/ja.yml

これで、本体の辞書ファイルをプラグインの辞書ファイルで上書きすることができました。

2013/11/23

Redmine のプラグインを Travis で CI してみた

Redmine のプラグインの場合、プラグイン本体のみ Github に登録しているので、そのままでは Travis で CI することができない。
諦めていたんだけど、.travis.yml のオプションとにらめっこしたらなんとなく出来そうな気がしたので試してみた。
10数回の試行を経て、なんとか出来たのでスクリプトを紹介します。

  • .travis.yml
    before_install があるので、after_install があるかと思ったらなかった。

  • before_install.sh
    gem インストール前に実行させるスクリプト。
    Travis では bundle install 前に直下の GemfileBUNDLE_GEMFILE 環境変数に登録されてしまう。
    しかし、指定したいのはプラグインの Gemfile ではなく、Redmine のものなのである。
    なので、mv しまくりでなんとかディレクトリ構成を整えた。苦労した。
    Redmine のダウンロード URL がバージョンだけに依存してくれないのが少し残念。

  • exec_test.sh
    テスト実行用スクリプト。
    前述のとおり after_install がなかったので、bundle install 後の処理(Redmineの初期化など)とテストの実行を同時にすることにした。
    こちらはそんなに苦労しなかった。

これで、プラグインを複数バージョンの Ruby でテストすることができるようになった。
でも、複数バージョンの Redmine でテストすることは当然できない。
複数バージョンの Redmine を対象にテストするなら Jenkins 使うのがいいんだろうな。

2013/08/01

Redmine plugin にて自動ロード対象のディレクトリを追加するには

どうやら Redmine はプラグインの lib は自動的にロードパスに登録するが、app 以下は controllers, models, helpers のみを autoload の対象にするようだ。
lib/redmine/plugin.rb にこんな記述があった。

例えば、フォームクラスを作って app/forms に配置したい場合は、init.rb に処理を追加してやる必要がある。 一つしか追加しないなら simple の方でいいだろうし、複数追加するなら plugin.rb をパクって multiple で書くのがいいんじゃないかな。

2013/07/28

Redmine plugin 開発時の fixture

Redmine のプラグインのユニットテストのために、fixture を追加した。 $REDMINE/plugins/my_plugin/test/fixtures/my_models.ymlという形でテストデータを追加し、bundle exec rake redmine:plugins:test RAILS_ENV=testを実行したらエラーになった。

Errno::ENOENT: No such file or directory - /Users/pinzolo/projects/my_plugin/redmine-2.3.1/test/fixtures/my_models.yml

つまり、プラグインのtest/fixturesディレクトリを見ていないということみたいだ。

プラグインの test/fixtures を見るように設定するなら、$REDMINE/plugins/my_plugin/test/test_helper.rb に下記を追加すればいいんだけど、こうすると $REDMINE/test/fixtures を見てくれなくなる。

fixture_path が配列でもよしなにやってくれるようにパッチを当てたいところだが、fixture_pathが結構ダイレクトに使われているので大変そうなのと、プラグイン側がやることでもなかろうということで、仕方なく $REDMINE/test/fixtures にコピーする。 fixture を作ったり更新したりする度にコピーするのはめんどいな。

2013/07/04

startup_redmine_plugin_development.sh

Redmine のプラグインを開発するときに最初に行う作業を自動化するスクリプトを書いた。
自動で行なってくれる作業は
  1. 専用ディレクトリの作成
  2. 最新のRedmineを取得
  3. Redmineをローカルにデプロイ
    1. database.ymlを作成
    2. gemのインストール
    3. トークンの作成
    4. マイグレーションの実行
    5. デフォルトデータのロード(デフォルトは日本語)
  4. プラグインの雛形を生成
  5. gitにて初回コミット
惜しむらくは、バージョンとダウンロードURLは都度メンテナンスしていく必要があることかな。

2013/06/22

Redmine プラグインのテストが実行できるまで

Redmineのプラグインのテストが実行できるまでのメモ。意外と苦労した。

環境はこちら。
  • Ruby 2.0.0-p195(use rbenv)
  • Redmine 2.3.1
  • Mac OS X 10.8.4

まずは、公式を参考に実行。

% bundle exec rake test:engines:all
rake aborted! Don't know how to build task 'test:engines:all' ...

タスクが存在していないみたいなので、テストに関連しそうなタスクの一覧を確認。

% bundle exec rake -T | grep test
rake ci # Run the Continous Integration tests for Redmine rake extract_fixtures # Create YAML test fixtures from data in an existing database. rake redmine:email:test[login] # Send a test email to the user with the provided login name rake redmine:plugins:test # Runs the plugins tests. rake redmine:plugins:test:functionals # Run tests for {:functionals=>"db:test:prepare"} rake redmine:plugins:test:integration # Run tests for {:integration=>"db:test:prepare"} rake redmine:plugins:test:units # Run tests for {:units=>"db:test:prepare"} rake test # Runs test:units, test:functionals, test:integration together (also available: test:benchmark, test:profile, test:plugins) rake test:coverage # Measures test coverage rake test:rdm_routing # Run tests for rdm_routing / Run the routing tests rake test:recent # Run tests for {:recent=>"test:prepare"} / Test recent changes rake test:scm # Run unit and functional scm tests rake test:scm:functionals # Run tests for {:functionals=>"db:test:prepare"} / Run the scm functional tests rake test:scm:setup:all # Creates all test repositories rake test:scm:setup:bazaar # Creates a test bazaar repository rake test:scm:setup:create_dir # Creates directory for test repositories rake test:scm:setup:cvs # Creates a test cvs repository rake test:scm:setup:darcs # Creates a test darcs repository rake test:scm:setup:filesystem # Creates a test filesystem repository rake test:scm:setup:git # Creates a test git repository rake test:scm:setup:mercurial # Creates a test mercurial repository rake test:scm:setup:subversion # Creates a test subversion repository rake test:scm:units # Run tests for {:units=>"db:test:prepare"} / Run the scm unit tests rake test:scm:update # Updates installed test repositories rake test:single # Run tests for {:single=>"test:prepare"} rake test:ui # Run tests for {:ui=>"db:test:prepare"} / Run the UI tests with Capybara (PhantomJS listening on port 4444 is required) rake test:uncommitted # Run tests for {:uncommitted=>"test:prepare"} / Test changes since last checkin (only Subversion and Git)

どうやら、rake redmine:plugins:test{functionals,integration,units}あたりでテストが出来そう。

% bundle exec rake redmine:plugins:test
rake aborted! undefined method `[]' for nil:NilClass … Tasks: TOP => db:test:load => db:test:purge

RAILS_ENV=test を忘れていた。

% bundle exec rake redmine:plugins:test RAILS_ENV=test
*** Mocha deprecation warning: Change `require 'mocha'` to `require 'mocha/setup'`. rake aborted! database configuration does not specify adapter … Tasks: TOP => redmine:plugins:test:units => db:test:prepare => db:abort_if_pending_migrations => environment

テスト用のデータベースの設定がしてない。 config/database.yml を編集して・・・

# config/databse.yml
development:
  adapter: sqlite3
  database: db/redmine.db

# ここから追加
test:
  adapter: sqlite3
  database: db/redmine_test.db

再度実行。

% bundle exec rake redmine:plugins:test RAILS_ENV=test
*** Mocha deprecation warning: Change `require 'mocha'` to `require 'mocha/setup'`. You have 221 pending migrations: 1 Setup 2 IssueMove 3 IssueAddNote 4 ExportPdf … Run `rake db:migrate` to update your database then try again.

マイグレーションができていないのね。

% bundle exec rake db:migrate RAILS_ENV=test
== Setup: migrating ========================================================== -- create_table("attachments", {:force=>true}) -> 0.0039s -- create_table("auth_sources", {:force=>true}) -> 0.0011s -- create_table("custom_fields", {:force=>true}) -> 0.0008s -- create_table("custom_fields_projects", {:id=>false, :force=>true}) -> 0.0004s -- create_table("custom_fields_trackers", {:id=>false, :force=>true}) -> 0.0413s -- create_table("custom_values", {:force=>true}) -> 0.0011s -- create_table("documents", {:force=>true}) -> 0.0008s -- add_index("documents", ["project_id"], {:name=>"documents_project_id"}) -> 0.0003s -- create_table("enumerations", {:force=>true}) -> 0.0005s -- create_table("issue_categories", {:force=>true}) -> 0.0005s -- add_index("issue_categories", ["project_id"], {:name=>"issue_categories_project_id"}) -> 0.0002s -- create_table("issue_histories", {:force=>true}) -> 0.0007s -- add_index("issue_histories", ["issue_id"], {:name=>"issue_histories_issue_id"}) -> 0.0002s -- create_table("issue_statuses", {:force=>true}) -> 0.0006s -- create_table("issues", {:force=>true}) -> 0.0011s -- add_index("issues", ["project_id"], {:name=>"issues_project_id"}) -> 0.0002s -- create_table("members", {:force=>true}) -> 0.0006s -- create_table("news", {:force=>true}) -> 0.0007s -- add_index("news", ["project_id"], {:name=>"news_project_id"}) -> 0.0002s -- create_table("permissions", {:force=>true}) -> 0.0007s -- create_table("permissions_roles", {:id=>false, :force=>true}) -> 0.0004s -- add_index("permissions_roles", ["role_id"], {:name=>"permissions_roles_role_id"}) -> 0.0002s -- create_table("projects", {:force=>true}) -> 0.0008s -- create_table("roles", {:force=>true}) -> 0.0004s -- create_table("tokens", {:force=>true}) -> 0.0006s -- create_table("trackers", {:force=>true}) -> 0.0005s -- create_table("users", {:force=>true}) -> 0.0009s -- create_table("versions", {:force=>true}) -> 0.0007s -- add_index("versions", ["project_id"], {:name=>"versions_project_id"}) -> 0.0002s -- create_table("workflows", {:force=>true}) -> 0.0006s == Setup: migrated (0.1067s) ================================================= … == RemoveIssuesDefaultFkValues: migrating ==================================== -- change_column_default(:issues, :tracker_id, nil) -> 0.0257s -- change_column_default(:issues, :project_id, nil) -> 0.0737s -- change_column_default(:issues, :status_id, nil) -> 0.0252s -- change_column_default(:issues, :assigned_to_id, nil) -> 0.0236s -- change_column_default(:issues, :priority_id, nil) -> 0.0245s -- change_column_default(:issues, :author_id, nil) -> 0.0251s == RemoveIssuesDefaultFkValues: migrated (0.1981s) =========================== % bundle exec rake redmine:load_default_data RAILS_ENV=test Select language: ar, az, bg, bs, ca, cs, da, de, el, en, en-GB, es, et, eu, fa, fi, fr, gl, he, hr, hu, id, it, ja, ko, lt, lv, mk, mn, nl, no, pl, pt, pt-BR, ro, ru, sk, sl, sq, sr, sr-YU, sv, th, tr, uk, vi, zh, zh-TW [en] ja ==================================== Default configuration data loaded.

もう一度実行。

% bundle exec rake redmine:plugins:test RAILS_ENV=test
*** Mocha deprecation warning: Change `require 'mocha'` to `require 'mocha/setup'`. /Users/pinzolo/.rbenv/versions/2.0.0-p195/bin/ruby -I"lib:test" -I"/Users/pinzolo/projects/sample_plugin/redmine-2.3.1/vendor/bundle/ruby/2.0.0/gems/rake-10.0.4/lib" "/Users/pinzolo/projects/sample_plugin/redmine-2.3.1/vendor/bundle/ruby/2.0.0/gems/rake-10.0.4/lib/rake/rake_test_loader.rb" "plugins/*/test/unit/**/*_test.rb" *** Mocha deprecation warning: Change `require 'mocha'` to `require 'mocha/setup'`. /Users/pinzolo/projects/sample_plugin/redmine-2.3.1/lib/SVG/Graph/Graph.rb:3: warning: class variable access from toplevel Run options: # Running tests: Finished tests in 0.067877s, 132.5928 tests/s, 132.5928 assertions/s. 9 tests, 9 assertions, 0 failures, 0 errors, 0 skips ruby -v: ruby 2.0.0p195 (2013-05-14 revision 40734) [x86_64-darwin12.4.0] /Users/pinzolo/.rbenv/versions/2.0.0-p195/bin/ruby -I"lib:test" -I"/Users/pinzolo/projects/sample_plugin/redmine-2.3.1/vendor/bundle/ruby/2.0.0/gems/rake-10.0.4/lib" "/Users/pinzolo/projects/sample_plugin/redmine-2.3.1/vendor/bundle/ruby/2.0.0/gems/rake-10.0.4/lib/rake/rake_test_loader.rb" "plugins/*/test/functional/**/*_test.rb" *** Mocha deprecation warning: Change `require 'mocha'` to `require 'mocha/setup'`. /Users/pinzolo/projects/sample_plugin/redmine-2.3.1/lib/SVG/Graph/Graph.rb:3: warning: class variable access from toplevel Run options: # Running tests: Finished tests in 0.062297s, 16.0521 tests/s, 16.0521 assertions/s. 1 tests, 1 assertions, 0 failures, 0 errors, 0 skips ruby -v: ruby 2.0.0p195 (2013-05-14 revision 40734) [x86_64-darwin12.4.0] /Users/pinzolo/.rbenv/versions/2.0.0-p195/bin/ruby -I"lib:test" -I"/Users/pinzolo/projects/sample_plugin/redmine-2.3.1/vendor/bundle/ruby/2.0.0/gems/rake-10.0.4/lib" "/Users/pinzolo/projects/sample_plugin/redmine-2.3.1/vendor/bundle/ruby/2.0.0/gems/rake-10.0.4/lib/rake/rake_test_loader.rb" "plugins/*/test/integration/**/*_test.rb"

成功したみたいなので、失敗させてみる。

# sample_model_test.rb
require File.expand_path('../../test_helper', __FILE__)

class SampleModelTest < ActiveSupport::TestCase

  # Replace this with your real tests.
  def test_truth
    #assert true
    assert false
  end
end
% bundle exec rake redmine:plugins:test:units RAILS_ENV=test
berk redmine:plugins:test:units RAILS_ENV=test (in /Users/pinzolo/projects/sample_plugin/redmine-2.3.1) *** Mocha deprecation warning: Change `require 'mocha'` to `require 'mocha/setup'`. /Users/pinzolo/.rbenv/versions/2.0.0-p195/bin/ruby -I"lib:test" -I"/Users/pinzolo/projects/sample_plugin/redmine-2.3.1/vendor/bundle/ruby/2.0.0/gems/rake-10.0.4/lib" "/Users/pinzolo/projects/sample_plugin/redmine-2.3.1/vendor/bundle/ruby/2.0.0/gems/rake-10.0.4/lib/rake/rake_test_loader.rb" "plugins/*/test/unit/**/*_test.rb" *** Mocha deprecation warning: Change `require 'mocha'` to `require 'mocha/setup'`. /Users/pinzolo/projects/sample_plugin/redmine-2.3.1/lib/SVG/Graph/Graph.rb:3: warning: class variable access from toplevel Run options: # Running tests: [1/9] SampleModelTest#test_truth = 0.00 s 1) Failure: test_truth(SampleModelTest) [/Users/pinzolo/projects/sample_plugin/redmine-2.3.1/plugins/sample_plugin/test/unit/sample_model_test.rb:8]: Failed assertion, no message given. Finished tests in 0.069086s, 130.2724 tests/s, 130.2724 assertions/s. 9 tests, 9 assertions, 1 failures, 0 errors, 0 skips ruby -v: ruby 2.0.0p195 (2013-05-14 revision 40734) [x86_64-darwin12.4.0] rake aborted! Command failed with status (1): [ruby -I"lib:test" -I"/Users/pinzolo/projects/sample_plugin/redmine-2.3.1/vendor/bundle/ruby/2.0.0/gems/rake-10.0.4/lib" "/Users/pinzolo/projects/sample_plugin/redmine-2.3.1/vendor/bundle/ruby/2.0.0/gems/rake-10.0.4/lib/rake/rake_test_loader.rb" "plugins/*/test/unit/**/*_test.rb" ] … Tasks: TOP => redmine:plugins:test:units

予定通り失敗した。
あとはテストを書いて実行していけばよさそうだ