web-dev-qa-db-ja.com

サイプレスのカスタムコマンドは、呼び出されたときに認識されません

Cypress/support /commands.jsファイルに次のカスタムコマンドを作成しました。

Cypress.Commands.add("login", (username, password) => {
    cy.request({
        method: 'POST',
        form: true,
        url: '/test/login/',
        body: {'username': username, 'password': password}
    })
})

ログイン機能をこのカスタムコマンドに移動する前に、テストに合格してログインが機能するようにしました。仕様でcy.login(testuser、testpwd)を使用して呼び出していますが、次のエラーメッセージが表示されます。TypeError:cy.loginは関数ではありません。 docs say テストファイルが評価される前に/cypress/support/commands.jsが読み込まれるので、そこにカスタムコマンドを配置するだけで、コマンドが使用可能になると思いました。ローカル(GUI)テストランナーを介してテストを実行しています。

6
Dan Swain

index.js内のすべてのコードと参照モジュールは、テストファイルの前にロードされます。したがって、commands.jsファイルでindex.jsを参照(必須)する必要があります。ただし、commands.jsモジュールをテストファイルに直接インポートすることはできますが、その場合はすべてのテストファイルに含める必要があります。推奨されるアプローチは、それをindex.jsファイルに含めることであり、テストファイルで明示的に参照することを心配する必要はありません。

6
Dinesh Kumar

@Dinesh Kumarの優れた answer を拡張するには、cypress.json内でデフォルトのサポートファイル(この場合は残念な命名スキーム)のサポートを無効にしていないことも重要です。行:supportFile: false

cypress.jsonがある場合は、その行を削除します。デフォルトのパスcypress/support/index.jsを使用して満足できない場合は、別のパスを指定することもできます。

supportフォルダーにあるcommands.jsファイルを使用したindex.jsの操作:

// index.js
const customCommands = require('./commands.js')

module.exports = {
  commands: customCommands
}

そして、設定を再確認してください。

// cypress.json
{
  "baseUrl": "http://demo.your-domain.test",
  "supportFile": false,  <-- delete this if present
  ...
}
4
GrayedFox

行を置くのに役立つかもしれませんimport './commands.js/';index.jsに

0
AlexNikonov