ユーザー新規登録をテストでハマったのでメモ。
ユーザー情報はFirebase Authenticationで管理しており、新規登録画面でユーザー登録し、Firebase上にユーザーがきちんと登録されていることを確認後、テスト終了時にFirebase上のユーザー情報を削除したい。
普通にこんな感じでやっても動かない。
const deleteUser = () => {
return new Promise(resolve => {
firebase.auth().onAuthStateChanged(user => {
resolve(user);
});
})
}
deleteUser().then(user => user.delete())
その後ドキュメントを見直して、Cypress.Promise
を発見したので試してみる。
https://docs.cypress.io/api/utilities/promise.html#Syntax
const deleteUser = () => {
return new Cypress.Promise(resolve => {
// 同じ
})
}
deleteUser().then(user => user.delete())
これも動かない。
Custom Commandsを使うと同期的に実行してくれるみたい。
https://docs.cypress.io/api/cypress-api/custom-commands.html#Syntax
To get your function into the Cypress pipeline you can use custom commands. The documentation doesn't state it, but you can return a Cypress.Promise from them.
Cypress.Commands.add('deleteFirebaseAccount', () => {
const firebase = setupFirebase();
return new Cypress.Promise(resolve => {
firebase.auth().onAuthStateChanged(user => {
resolve(user);
});
});
});
afterEach(() => {
cy.deleteFirebaseAccount().then(user => user.delete())
});
こんな感じで書いてあげたらうまく動いた。