1

私はテストフレームワークに取り組んでいます。2 つの関数が等しいことを主張するには、次を使用しています。

var a = function(){ return 5; };
var b = function(){ return 5; };

var areEqual = (a.toString() == b.toString());

カルマでいくつかのテストを実行していますが、カルマ カバレッジ レポートを使用してテスト カバレッジ レポートを追加するまで、すべて問題ありませんでした。イスタンブールがコード 2 の機能を追加しているように見えるため、上記のアサーションは失敗しています。

a.toString()

次のようになります。

function () {
  __cov_Mgz6NtZP5n6U6J27W7D4rA.f['33']++;
  __cov_Mgz6NtZP5n6U6J27W7D4rA.s['152']++;
  return 5;
}

私は試しました:

/* istanbul ignore next */
var a = function(){ return 5; };
/* istanbul ignore next */
var b = function(){ return 5; };

しかし、うまくいかないようです。この問題を回避する方法を教えてください。

4

2 に答える 2

1

正規表現を使用して、イスタンブール インジェクションを削除できます。

var aStr = a.toString();
// function () {__cov_Mgz6NtZP5n6U6J27W7D4rA.f['33']++;__cov_Mgz6NtZP5n6U6J27W7D4rA.s['152']++;return 5;}

var aCleanStr = aStr.replace(/__cov.*?;/g, '');
// function () {return 5;}

式は/__cov.*?;/g、ここで

  • __cov- で始まる部分文字列に一致します__cov
  • .*?;;- istanbul インジェクションの間に何らかのコードが存在する可能性があるため、最初の文字まで任意の文字に一致します。?ここでは「非貪欲」オプションを表します
  • フラグg- 文字列からこれらすべてのエントリを削除します
于 2015-06-09T12:07:59.003 に答える