2017-08-16 16 views
14

いくつか失敗したテストは、[object ErrorEvent] thrownしか出力しません。コンソールに何も表示されず、問題のコードを特定するのに役立ちます。これらを追跡するために必要なことはありますか?カルマ/ジャスミンテストで「[オブジェクトErrorEvent]がスローされました」というエラーをどのようにデバッグできますか?

[EDIT]:私はあなたが回避策として--sourcemaps=falseでテストを実行する必要があることを修正するには、ジャスミンv2.7.0

+0

さらにエラーを含めることはできますか?前と後の複数行のエラー? – Kevin

+0

'[object ErrorEvent] throwされました。 'という文字通りのことです。前後には何もありません。 –

+0

運が良ければ、この問題を文字通り同じ時刻に投稿していますが、これは削除する必要のある「悪意のある」スクリプトタグ(CSSリンクかもしれません)であることが判明しました(私の問題はCORSに関連しています)、またはCSSの場合は、crossorigin = "anonymous"を追加しました。そのようなスクリプト/ cssタグのコードを調べてみてください。私の場合は、全く別のコンポーネントが原因であることがわかりました。 – TheDude

答えて

18

をカルマのV1.70を実行していますよ。私もその問題を持っていた ので、私はちょうど、最新のCLIに移行しても、私は完全にnode_modulesを再インストールしたすべてのパッケージがpackage.jsonに更新されていることを確認してください:
はそのhttps://github.com/angular/angular-cli/issues/7296

UPDATE上の未解決の問題があります今問題はなくなっています。

+1

これは私のために働いた。これは、問題が定義されていない入力バインディングであることを明らかにするのに役立ちました。 –

0

TL; DR:テストルーティングに関連している可能性があります。

[object ErrorEvent] thrownも届いています。 1時間後、1行のコードにトレースしました。

this.username = this.userService.getUser(this.route.snapshot.paramMap.get('id'))[0]; 

問題は、this.route.snapshot.paramMap.get('id')を評価しようとするテスト環境にあります。

0に置き換えた場合、[object ErrorEvent] thrownがなくなります。

マイUserServiceのはそうのようなユーザーを持っています

public users = [ ["admin", "First name", "Surname", etc... ] ]. 

ので0はちょうどインデックス0で、このユーザーを取得します。

通常、アプリを正常に実行しているときに、ユーザーが自分のユーザーのテーブルから編集するユーザーを選択すると、this.route.snapshot.paramMap.get('id')が評価されます。

私のHTMLでは、*ngFor="let user of users; index as i"はすべてのユーザーを表示し、routerLink="/edit/{{i}}"というループを表示するので、各ユーザーの編集ボタンをクリックすることができます。 http://localhost:4200/edit/0を使用して、前述の管理者の詳細を編集します。

0

私にとっては、コンポーネントのngOnInitで解決される約束事を持つことに関連していました。私はspyOn

beforeEach(async(
    //... initialise testbed and component 
)) 
beforeEach(fakeAsync(
    // ... setup mocks then call: 
    component.ngOnInit() 
    tick() 
    fixture.detectChanges() 
)) 

Angular - How to unit test component with asynchronous service call

0

asyncfakeAsyncを使用して、非同期サービスをスタブなどをチェックしなければならなかった私の推測では、あなたがレースまたは非常に設定されていない非同期テストを持っているということですそうでないかもしれません。私は、デバッグケースを修正し、コマンドラインが無視されるようにする必要があると仮定します。 [オブジェクトErrorEvent]がスローされた場合に、カルマテストランナー(ブラウザ)をリフレッシュし続けるだけで、非同期条件が正しく実装されていないことを確認してください。

がうまくいけば、それはあなたがこのように、端末からテストを実行することにより、より詳細なエラーメッセージが出た場合

0

は試してみてください動作します、あなたは置き換えることができ、あなたのテストで

ng test -sm=false 

it('should...') 

fit('should...') 

fitが先行するテストのみが実行されます。 は、このようなテストを実行し、テストを実行した後にウェブブラウザを開いたままにするには、次の

ng test -sm=false --single-run false 

は個人的に、私は二回、このエラーが発生しました。両方ともfixture.detectChanges()を呼び出すときにだけトリガされました。

最初に時には、私の.htmlファイルでより安全に文字列補間を使用して解決しました。

危険例:

<p>{{user.firstName}}</p> 

セーフ(R)例(疑問符に注意):

<p>{{user?.firstName}}</p> 

同じ結合性に適用することができる:

<p [innerText]="user?.firstName"></p> 

私は.htmlファイルでDatePipeを使用していましたが、私が使ったモックプロパティは日付ではありませんでした。

の.htmlファイル:

<p>{{startDate | date: 'dd-MM-yyyy'}}</p> 

.TS(モックデータ)ファイル(間違っ):

let startDate = 'blablah'; 

.TS(モックデータ)ファイル(正しい):

let startDate = '2018-01-26'; 
0

私にとっては、問題は私が誤ってauth0-lockライブラリを使用していました。

関連する問題