前提・実現したいこと
Node.js + MongoDB で会員制のウェブサイトを作成しています。
パスワードリセットについて、以下の実装を行いました。
- パスワードを忘れた時に、ログイン画面の「パスワードを忘れましたか?」リンクをクリックすると、パスワードリセットメールが送信される。
- 60 分以内にメールのリンクをクリックして、遷移した画面で新しいパスワードを入力すると、パスワードを変更できる。
この実装を E2E テストで再現したいのですが、Jest-Puppeteer を使って、以下のコードを書きました。
パスワードリセットメールを送信後に、60 分時間を進めたいのですが、時間の操作ができずに困っています。
Jest-Puppeteer を使って、テストコード内の時間を進める方法を教えてください。
テストコード
javascript
1test('60 分経過後に、パスワードがリセットできない', async () => { 2 // パスワードリセットメールを要求 3 await page.goto(`http://localhost:3001/users/forgot_password`); 4 await expect(page).toFillForm('form[name="form"]', { 5 email: 'testUser@example.com', 6 }); 7 await Promise.all([ 8 page.waitForNavigation(), 9 expect(page).toClick({ type: 'xpath', value: buttonPath }), 10 ]); 11 // メールが送信される 12 await expect(page).toMatch( 13 `testUser@example.com にパスワードリセットメールを送信しました。60 分以内にパスワードのリセットを実行してください。` 14 ); 15 16 17 // ここで 60 分、時間を進めるコードを書きたい 18 19 const user = await User.findOne({ 20 email: 'testUser@example.com', 21 }); 22 await page.goto( 23 `http://localhost:3001/users/${user._id}/reset_password/${user.resetPasswordToken}` 24 ); 25 await expect(page).toMatch( 26 `60 分が経過しました。もう一度、「パスワードを忘れましたか?」をクリックしてください。` 27 ); 28});
試したこと
jest-date-mock を使って、時間を操作しようとしましたが、時間は変更できませんでした。
javascript
1const jestDataMock = require('jest-date-mock'); 2jestDataMock.advanceTo(new Date(2018, 5, 27, 0, 0, 0)); // reset to date time.
あなたの回答
tips
プレビュー