web-dev-qa-db-ja.com

エラーがコンソールに書き込まれたかどうかを確認します

サイプレスユニットテストの実行時にエラーがコンソールに書き込まれたかどうかを確認する方法を見つけようとしています。

コンソールに何かを記録する方法を知っています

cy.log('log this to the console');

エラーが書き込まれているかどうかを確認する方法はありません。

(ブラウザ)コンソールログからエラーを読み取る方法の提案

注:おそらく「スマート」なテスト方法ではないかもしれませんが、私が使用する私のjsライブラリは「不平を言い」、エラーをブラウザーのログに書き込むことがあります。これはテストを簡略化するためです。

12
udo

編集:次のは、ヘッドレスモードの場合、端末に直接ログを記録しませんが、それでも失敗しますAUTの_console.error_でテストし、ヘッドレスターミナルでも間接的にエラーメッセージを表示します。

正確にはわかりませんが、サイプレスで出力を記録できるすべての場所と、いくつかのケースを処理する方法を見ていきましょう。

まず、概要:

enter image description here

  1. コマンドログにログインするには、次を使用します:

    _// from inside your test
    cy.log('foo');
    _
  2. devToolsコンソールにログインするには

    _// from inside your test
    console.log('bar');
    _
  3. terminalにログインするには、サイプレスのノードプロセス内からログインする必要があります。

    _// from within e.g. your plugin/index.js file
    console.log('baz');
    _

AUTのエラーをターミナル、コマンドログに記録し、テストに失敗する方法

(注、AUTはApplication under test、つまりアプリケーションを意味します)。

ansicolor パッケージを使用して、ターミナルでエラーを赤色にしていますが、これはオプションです。

_// plugins/index.js
const ansi = require(`ansicolor`);
module.exports = ( on ) => {
    on(`task`, {
        error ( message ) {
            // write the error in red color
            console.error( ansi.red(message) );
            // play `beep` sound for extra purchase
            process.stdout.write(`\u0007`);
            return null;
        }
    });
};
_

注:内部cy.now()コマンドを使用して、サイプレスが_Cypress detected that you returned a promise_をスローする傾向を回避する(IMO)べきでない場合.

https://github.com/cypress-io/cypress/issues/300#issuecomment-438176246 から変更)

_// support/index.js or your test file
Cypress.on(`window:before:load`, win => {

    cy.stub( win.console, `error`, msg => {
        // log to Terminal
        cy.now(`task`, `error`, msg );
        // log to Command Log & fail the test
        throw new Error( msg );
    });
});
_
8
dwelle

現在、あなたが求めていることを行う簡単な方法はありませんが、この情報を取得する最良の方法についていくつかの良い議論がありました。ここでは1つのソリューションをコピーしましたが、githubリンクをたどると、提案されている他のソリューションが表示されます。

このスニペットは、ここにあるgithubの問題から取られました: https://github.com/cypress-io/cypress/issues/3

ただ一つの簡単な解決策は、コンソール機能をスパイすることです。 cy.window().then((win) => { cy.spy(win.console, "log") })

これにより、その関数が呼び出されるたびにコマンドログが出力され、ログに記録された内容をアサートすることもできます。

何かがおかしいと断言したい理由に応じた別のオプションは、ヘッドレスモードのテストでエラーを出力することです。エンジニアリングのVPがこれを行うNPMパッケージを作成しました。

Cypress-failed-log

3