2017-05-04 22 views
4

私はlookingaroundです。この質問はrecurring thingのようです。しかし、私が見つけた解決策のどれも私にとってはうまくいかないようです。ジャスミンカスタムマッチャーtypescript定義を追加するにはどうすればよいですか?

次の使用:

{ 
    "typescript": "2.3.2", 
    "jasmine-core": "2.6.1", 
    "@types/jasmine": "2.5.47" 
} 

私は活字体は私のカスタム照合定義を含む名前空間宣言をマージすることができません。

これを追加する:

declare namespace jasmine { 
    interface Matchers<T> { 
    toBeAnyOf(expected: jasmine.Expected<T>, expectationFailOutput?: any): boolean; 
    } 
} 

は、以前jasmineに宣言されているすべての他のタイプを非表示にします。コンパイラは次のようなエラーを出力します:

[ts] Namespace 'jasmine' has no exported member 'CustomMatcherFactories' 
[ts] Namespace 'jasmine' has no exported member 'CustomMatcher'. 

カスタムマッチャーを追加してTypescriptでうまく動作させる方法はありますか?

tslint:recommendedルールセットを使用している場合は、tslintに関する追加の問題があります。これらのルールはnamespaceまたはmoduleキーワードの使用を許可しないため、これを試してみるためにlinterを無効にして(または"no-namespace"のルールを変更して)いなければなりませんでした。これが「推奨されない」場合は、定義を拡張する方法を理解できません。

答えて

3

カスタムマッチャーを追加したときに3つのファイルを修正する必要がありました。実際のマッチャーを含むmatchers.tsというファイルを作成しました。私はその後、matt.tsファイルへのimportをtest.tsに追加しました。最後に、私は私のマッチャーを含むtypings.d.tsファイルへのインターフェースを追加しました。 '宣言' ステートメントは完全に喜んで立ち往生することができ

matchers.ts(任意の名前)

beforeEach(() => { 
    jasmine.addMatchers({ 
     toContainText:() => { 
      return { 
       compare: (actual: HTMLElement, expectedText: string, customMessage?: string) => { 
        const actualText = actual.textContent; 
        return { 
         pass: actualText.indexOf(expectedText) > -1, 
         get message() { 
          let failureMessage = 'Expected ' + actualText + ' to contain ' + expectedText; 

          if (customMessage) { 
           failureMessage = ' ' + customMessage; 
          } 

          return failureMessage; 
         } 
        }; 
       } 
      }; 
     }, 
    }); 
}); 

test.ts

import 'test/test-helpers/global/matchers'; (my relative filepath) 

typings.d.ts

declare module jasmine { 
    interface Matchers { 
    toContainText(text: string, message?: string): boolean; 
    } 
} 
+0

spec.tsファイル – DJClayworth

関連する問題