Skip to content

Commit ccbd949

Browse files
committed
test: add formInline.spec.ts to e2e
1 parent 1012686 commit ccbd949

File tree

6 files changed

+168
-0
lines changed

6 files changed

+168
-0
lines changed
14.5 KB
Loading
16.3 KB
Loading
16.5 KB
Loading
17.3 KB
Loading
16.7 KB
Loading
Lines changed: 168 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,168 @@
1+
import { afterAll, beforeAll, describe, expect, test } from 'vitest'
2+
import { launch, PuppeteerLaunchOptions } from 'puppeteer'
3+
import type { Browser, Page } from 'puppeteer'
4+
5+
// ブラウザの起動オプションの設定。使用できるパラメータに関しての詳細は以下を参照ください。
6+
// https://pptr.dev/api/puppeteer.browserlaunchargumentoptions
7+
const options: PuppeteerLaunchOptions = {
8+
headless: false,
9+
slowMo: 75,
10+
defaultViewport: {
11+
width: 1280,
12+
height: 1024
13+
},
14+
devtools: true,
15+
args: ['--window-size=1680,1024']
16+
}
17+
18+
describe('Index', () => {
19+
let browser: Browser
20+
let page: Page
21+
22+
beforeAll(async () => {
23+
browser = await launch(options)
24+
page = await browser.newPage()
25+
})
26+
27+
afterAll(async () => {
28+
await browser.close()
29+
})
30+
31+
describe('画面初期状態の確認', () => {
32+
test('1-送信ボタンが非活性であること', async () => {
33+
try {
34+
// Act
35+
await page.goto('http://localhost:3000/formInline')
36+
const isDisabled = await page.$eval(
37+
'[data-testid="submit-btn"]',
38+
element => (element as HTMLButtonElement).disabled
39+
)
40+
41+
// スクリーンショットの撮影
42+
await page.screenshot({
43+
path: './src/tests/e2eTest/evidence/pages/formInline/test-01.png',
44+
fullPage: true
45+
})
46+
47+
// Assert
48+
expect(isDisabled).toBeTruthy()
49+
} catch (e) {
50+
console.error(e)
51+
expect(e).toBeUndefined()
52+
}
53+
}, 60000)
54+
})
55+
56+
describe('フォームのバリデーションチェック', () => {
57+
test.each([
58+
[
59+
'2',
60+
'email'
61+
],
62+
[
63+
'3',
64+
'password'
65+
]
66+
])(
67+
'%s:%sが入力必須の項目であること',
68+
async (
69+
testNo,
70+
inputName
71+
) => {
72+
try {
73+
// Act
74+
await page.goto('http://localhost:3000/formInline')
75+
await page.type(`input[name="${inputName}"]`, '')
76+
await page.keyboard.press('Tab')
77+
78+
await page.screenshot({
79+
path: `./src/tests/e2eTest/evidence/pages/formInline/test-0${testNo}.png`,
80+
fullPage: true
81+
})
82+
83+
const errorMsg = await page.$eval(
84+
`[data-testid="${inputName}-error-msg"]`,
85+
element => element.textContent
86+
)
87+
88+
// Assert
89+
expect(errorMsg).toBe(`${inputName}は必須項目です`)
90+
} catch (e) {
91+
console.error(e)
92+
expect(e).toBeUndefined()
93+
}
94+
},
95+
60000
96+
)
97+
98+
test('4-emailの入力は有効なメールアドレス形式であること', async () => {
99+
try {
100+
// Act
101+
await page.goto('http://localhost:3000/formInline')
102+
await page.type('input[name="email"]', 'test')
103+
await page.keyboard.press('Tab')
104+
105+
await page.screenshot({
106+
path: './src/tests/e2eTest/evidence/pages/formInline/test-04.png',
107+
fullPage: true
108+
})
109+
110+
const errorMsg = await page.$eval(
111+
'[data-testid="email-error-msg"]',
112+
element => element.textContent
113+
)
114+
115+
// Assert
116+
expect(errorMsg).toBe('emailは有効なメールアドレスではありません')
117+
} catch (e) {
118+
console.error(e)
119+
expect(e).toBeUndefined()
120+
}
121+
}, 60000)
122+
123+
test('5-送信ボタンを押下した場合、myPageへ遷移すること', async () => {
124+
try {
125+
// Arrange
126+
await page.goto('http://localhost:3000/formInline')
127+
await page.type('input[name="email"]', '[email protected]')
128+
await page.type('input[name="password"]', 'test')
129+
await page.keyboard.press('Tab')
130+
const isDisabled = await page.$eval(
131+
'[data-testid="submit-btn"]',
132+
element => (element as HTMLButtonElement).disabled
133+
)
134+
135+
// Act
136+
await page.click('[data-testid="submit-btn"]')
137+
138+
await page.screenshot({
139+
path: './src/tests/e2eTest/evidence/pages/formInline/test-05.png',
140+
fullPage: true
141+
})
142+
143+
// textContentは前後に空白を付与したテキストを返却するのでtrimで空白を除去する必要があります
144+
const pageTitle = await page.$eval(
145+
'[data-testid="page-title"]',
146+
element => element.textContent?.trim()
147+
)
148+
const email = await page.$eval(
149+
'[data-testid="page-email"]',
150+
element => element.textContent
151+
)
152+
const password = await page.$eval(
153+
'[data-testid="page-password"]',
154+
element => element.textContent
155+
)
156+
157+
// Assert
158+
expect(isDisabled).toBeFalsy()
159+
expect(pageTitle).toBe('MyPage')
160+
expect(email).toBe('[email protected]')
161+
expect(password).toBe('test')
162+
} catch (e) {
163+
console.error(e)
164+
expect(e).toBeUndefined()
165+
}
166+
}, 60000)
167+
})
168+
})

0 commit comments

Comments
 (0)