Thorで書いたタスクのテストをする方法

Thorでタスクを書くとそのメソッドが普通のRubyのようには呼べません。それでもやっぱりテストは書きたいのでThorのspecをいろいろ見てたらありました。

# encoding: utf-8
require "rubygems"
require "thor"
require "rspec"
require "stringio"

class Sample < Thor
  desc "name", "sample name"
  def name
    puts "pochi"
  end
end

describe Sample do
  it "should display 'pochi'" do
    capture(:stdout) {
      Sample.new.invoke("name")
    }.strip.should == "pochi"
  end
end