2011-11-01 5 views
2

PhantomJSを使用して、いくつかの純粋なJavaScriptのクライアント側テストを行っています。これらはrake testと統合したいと思います。Rakeのテストタスクを拡張

は現在、私はこれを使用します。ただし

namespace :test do 

    task :client do 
    basedir = Rails.root.join("test", "client") 
    sh "cd #{basedir} && phantomjs lib/run-qunit.js index.html" 
    end 

end 

task :test => "test:client" 

は、この統合は完璧にはほど遠いです。これらのテストのいずれかが失敗すると、レーキは中止されます。また、:units,:functionalsおよび:integrationとは対照的に、最後に問題の要約はありません(たとえば、「6テスト、21アサーション、1失敗、0エラー」)。

私はそのデータを簡単に十分に抽出することができましたが、レイクにトータルテストタリーに追加する方法を教えてください。

+0

私はRailsに慣れていないので、何かを誤解するかもしれません。しかし、私はあなたの仕事でテストを参照してください。あなたはタスクを定義しますが、テストはありません。シェルコマンドの呼び出しだけです。 Webアプリケーションをテストする場合は、watirを参照する必要があります。 – knut

+0

テストは純粋なJavaScriptで行われ、index.htmlから(SCRIPTタグを介して)参照されます。 – AnC

答えて

2

あなたはshでシェルコマンドを呼び出しています。 Rubyはそれがテストであることを知りません。 さらに、shは、障害が発生した場合に停止するようです。

2つのことを行う必要があります。エラーをキャッチし、通話の結果を確認します。

例:

require 'rake' 
$summary = Hash.new(0) 

def mytest(name, cmd) 
    $summary['test'] += 1 
    sh cmd do |ok, res| 
    if ok 
     $summary['ok'] += 1 
    else 
     $summary['failure'] += 1 
     puts "#{cmd } failed" 
    end 
    end 
end 
namespace :test do 
    task :one do |tsk| 
    mytest(tsk.name, "dir") 
    end 
    task :two do |tsk| 
    mytest(tsk.name, "undefined_cmd") 
    end 
    task :summary do 
    p $summary 
    end 
end 

task :test => "test:one" 
task :test => "test:two" 
task :test => "test:summary" 

shは失敗をキャッチするブロックと呼ばれています。ブロック内で結果を分析します(OKの場合はtrue、エラーが発生した場合はfalse)。結果はサマリーハッシュに追加されます。

コードを変更してコードを2つに分割することができますファイル:1つのファイル内のすべてのテストおよびすくいファイルはRake::TestTastを取得

あなたのテストファイルは次のようになります。終了コードを使用してテストフィニッシュ場合

gem 'test-unit' 
require 'test/unit' 

class MyTest < Test::Unit::TestCase 
    def test_one 
    assert_nothing_raised{ 
     basedir = Rails.root.join("test", "client")   
     res = system("cd #{basedir} && phantomjs lib/run-qunit.js index.html") 
     assert_true(res) 
    } 

    end 
    def test_two 
    assert_nothing_raised{ 
     res = `dir` #Test with windows 
     assert_match(/C:/, res) #We are in c: 
    } 
    end 
end 

これは、のみ動作しますおそらく、あなた代わりに``を使用し、詳細な分析のためにテストの出力を取得することができます

+0

ありがとう、これは役に立つと思われます - 私の最初の試みは失敗しましたが、それはちょっとだけ私があなたの指示をもう一度読み直さなければならないことを意味するかもしれません。私はちょっと深く掘り下げるチャンスを得るとすぐに受け入れます。 – AnC

+0

私はあなたが示唆したように、PhantomJSコールを単体テストに移行させました。しかし、私は認めなければなりません、あなたのレーキの仕事が何をしているのか、それがなぜ必要なのかは分かりません。とにかく、私を正しい軌道に乗せてくれてありがとう! – AnC