2017-01-01 15 views
1

expect.jsマッチャーをいくつか書いていますが、マッチャー自体をテストしたいと思います。だから私は肯定的および否定的なテストを書いてみたい。私が書いたとしましょう。expect.jsの拡張機能をテストする

toContainItem(name); 

このように使われています。

expect(femaleNames).toContainItem('Brad'); // test fails 
expect(femaleNames).toContainItem('Angelina'); // test passes 

私がしたいことは、ネガティブケースのテストを書くことです。

it('should fail if the item is not in the list', function() { 
    expect(function() { 
     expect(femaleNames).toContainItem('Brad'); 
    }).toFailTest('Could not find "Brad" in the array'); 
}); 

は、私はそれが含むテストを失敗しない環境の中で、私の失敗テストコードを実行するかどうかはわかりません。これは可能ですか?


EDIT:Carl Manasterの答えに基づいて、上記のコードを実行できるようにするための拡張機能を用意しました。

expect.extend({ 
    toFailTest(msg) { 
     let failed = false; 
     let actualMessage = ""; 
     try 
     { 
      this.actual(); 
     } 
     catch(ex) 
     { 
      actualMessage = ex.message; 
      failed = true; 
     } 

     expect.assert(failed, 'function should have failed exception'); 

     if(msg) { 
      expect.assert(actualMessage === msg, `failed test: expected "${msg}" but was "${actualMessage}"`); 
     } 
    } 
}); 

答えて

1

私はあなたがして、インナーはあなたがcatch節の障害変数をクリアtry/catchブロックに期待ラップ変数の値についてのあなたの実際の主張を作ることができると思うだろう。

let failed = true; 
try { 
    expect(femaleNames).toContainItem('Brad'); 
} catch (e) { 
    failed = false; 
} 
expected(failed).toBe(false); 
+1

おかげでカール - それは行きます!それが例外を介して機能していることを知らなかった。 –

+1

Carl - これに感謝します。それは私が思いついた解決策の核で、今私の質問に編集されました。私がやったのは 'expect(fn).toFailTest(expectedErrorMessage)'と書くことができるようにまとめたものです。 –

関連する問題