サイプレスユニットテストの実行時にエラーがコンソールに書き込まれたかどうかを確認する方法を見つけようとしています。
コンソールに何かを記録する方法を知っています
cy.log('log this to the console');
エラーが書き込まれているかどうかを確認する方法はありません。
(ブラウザ)コンソールログからエラーを読み取る方法の提案
注:おそらく「スマート」なテスト方法ではないかもしれませんが、私が使用する私のjsライブラリは「不平を言い」、エラーをブラウザーのログに書き込むことがあります。これはテストを簡略化するためです。
編集:次のは、ヘッドレスモードの場合、端末に直接ログを記録しませんが、それでも失敗しますAUTの_
console.error
_でテストし、ヘッドレスターミナルでも間接的にエラーメッセージを表示します。
正確にはわかりませんが、サイプレスで出力を記録できるすべての場所と、いくつかのケースを処理する方法を見ていきましょう。
コマンドログにログインするには、次を使用します:
_// from inside your test
cy.log('foo');
_
devToolsコンソールにログインするには:
_// from inside your test
console.log('bar');
_
terminalにログインするには、サイプレスのノードプロセス内からログインする必要があります。
_// from within e.g. your plugin/index.js file
console.log('baz');
_
(注、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 );
});
});
_
現在、あなたが求めていることを行う簡単な方法はありませんが、この情報を取得する最良の方法についていくつかの良い議論がありました。ここでは1つのソリューションをコピーしましたが、githubリンクをたどると、提案されている他のソリューションが表示されます。
このスニペットは、ここにあるgithubの問題から取られました: https://github.com/cypress-io/cypress/issues/3
ただ一つの簡単な解決策は、コンソール機能をスパイすることです。
cy.window().then((win) => { cy.spy(win.console, "log") })
これにより、その関数が呼び出されるたびにコマンドログが出力され、ログに記録された内容をアサートすることもできます。
何かがおかしいと断言したい理由に応じた別のオプションは、ヘッドレスモードのテストでエラーを出力することです。エンジニアリングのVPがこれを行うNPMパッケージを作成しました。