2016-03-15 5 views
8

テストを制限する方法を理解しようとしているため、カバレッジレポーターはテストが行​​われたときにその機能のために、具体的にはと書かれています。カルマ、ジャスミン、イスタンブールを使用して、テスト対象の関数/メソッドを指定する方法

@coversアノテーションは、テストメソッドをテストしたい 方法(複数可)を指定するには、テストコードで使用することができます:

PHPUnit docから次の例では、私が達成しようとするどのようなかなり良いを示しています:

/** 
* @covers BankAccount::getBalance 
*/ 
public function testBalanceIsInitiallyZero() 
{ 
    $this->assertEquals(0, $this->ba->getBalance()); 
} 

上記のテストが実行されます場合は、唯一の機能getBalanceをカバーとしてマークされ、どれも他のことになります。

JavaScriptテストの実際のコードサンプルがあります。このテストは、機能カバーとしてgetDateRangegetDateRange内部から呼び出された他の機能をマークします

it('Test get date range', function() 
{ 
    expect(dateService.getDateRange('2001-01-01', '2001-01-07')).toEqual(7); 
}); 

:このテストでは、私はを取り除くためにしようと、不要な挙動を示しています。このような理由から、私のプロジェクトの実際のコードカバレッジは、おそらく報告されたコードカバレッジよりもずっと低いでしょう。

どのようにこの動作を停止できますか? Karma/Jasmine/Istanbulが私の望むやり方で動作するようにする方法はありますか、またはJavaScriptテスト用の別のフレームワークに切り替える必要はありますか?

+0

実際の生産コードへの呼び出し回数を減らすために、依存関係注入とモックを使用することが考えられます。 – henrikmerlander

+0

私はhenrikmerlanderに同意します。また、テストされたメソッドの中でモックの代わりに実際の関数呼び出しを間接的に使用している場合は、その関数もテストしています – ejosafat

答えて

2

あなたが求めている理由は特にありません。あなたのテストでネストされた関数が呼び出された場合、その関数も同様に扱われます。実際に間接的にそのコードをテストしているので、コードカバレッジメトリックにそのコードを含めないでください。内部関数にバグが含まれている場合は、直接テストしていなくてもテストでキャッチできます。

あなたは、特定のパスを無視するイスタンブールを伝えるために特別なコメントを使用してコードに注釈を付けることができます。 https://github.com/gotwarlost/istanbul/blob/master/ignoring-code-for-coverage.md が、それはあなたが特定の実行パスはしたくない知っていればカバレッジを低下させない、と思い、反対のためのより多くのですテストケースを作成するのが難しいかもしれないからかもしれません。

また、孤立してテストされた "低レベル"機能を気にする場合は、コードをモジュラー形式で構成して、コードを最初にテストできるようにしてください。また、さまざまなテスト実行構成を設定することもできます。そのため、基本ロジックのみをテストし、その範囲を報告するスイートを用意することができます。

コメントに示唆されているように、擬似と依存性の注入はテストの焦点を絞るのに役立ちますが、基本的には、これらのパーツの統合を一緒にチェックする高レベルのテストが必要です。あなたがすべてを模倣すれば、一緒に働く実際の作品をテストすることは決してありません。

関連する問題