Skip to content

Commit 38d11b1

Browse files
authored
Merge pull request #103 from KentYang123/512558014
[LAB2] 512558014
2 parents 113b3cd + e525fef commit 38d11b1

File tree

3 files changed

+94
-9
lines changed

3 files changed

+94
-9
lines changed

lab2/main_test.js

Lines changed: 71 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,75 @@
11
const test = require('node:test');
22
const assert = require('assert');
3+
const fs = require('fs');
4+
5+
// 模擬 fs.readFile 方法,返回假數據
6+
test.mock.method(fs, 'readFile', (file, options, callback) => {
7+
callback(null, 'Alice\njohn\nBob');
8+
});
9+
10+
// 從 main.js 導入 Application 和 MailSystem 類
311
const { Application, MailSystem } = require('./main');
412

5-
// TODO: write your tests here
6-
// Remember to use Stub, Mock, and Spy when necessary
13+
// 測試 MailSystem_write() 方法
14+
test('MailSystem_write()', () => {
15+
const ms = new MailSystem();
16+
assert.strictEqual(ms.write('Alice'), 'Congrats, Alice!'); // 確認寫入郵件的功能
17+
assert.strictEqual(ms.write(null), 'Congrats, null!'); // 確認處理空值的功能
18+
assert.strictEqual(ms.write(512558014), 'Congrats, 512558014!'); // 確認處理數字名稱的功能
19+
});
20+
21+
// 測試 MailSystem_send() 方法
22+
test('MailSystem_send()', () => {
23+
const ms = new MailSystem();
24+
const name = 'Alice';
25+
test.mock.method(Math, 'random', () => 0.6); // 假設 Math.random() 始終返回 0.6
26+
assert.strictEqual(ms.send(name, 'success'), true); // 確認發送成功郵件的功能
27+
test.mock.method(Math, 'random', () => 0.4); // 假設 Math.random() 始終返回 0.4
28+
assert.strictEqual(ms.send(name, 'fail'), false); // 確認發送失敗郵件的功能
29+
});
30+
31+
// 測試 Application_getNames() 方法
32+
test('Application_getNames()', async () => {
33+
const app = new Application();
34+
const name_list = ['Alice', 'john', 'Bob'];
35+
const names = await app.getNames();
36+
assert.deepStrictEqual(names, [name_list, []]); // 確認獲取名字列表的功能
37+
});
38+
39+
// 測試 Application_getRandomPerson() 方法
40+
test('Application_getRandomPerson()', async () => {
41+
const app = new Application();
42+
const [names] = await app.getNames(); // 等待獲取名字列表
43+
const randomPerson = app.getRandomPerson();
44+
assert.ok(names.includes(randomPerson)); // 確認隨機獲取的人員在名字列表中
45+
});
46+
47+
// 測試 Application_selectNextPerson() 方法
48+
test('Application_selectNextPerson()', async () => {
49+
const app = new Application();
50+
const [names] = await app.getNames();
51+
app.selected = ['Alice'];
52+
let cnt = 0;
53+
test.mock.method(app, 'getRandomPerson', () => {
54+
if (cnt <= names.length) {
55+
return names[cnt++];
56+
}
57+
});
58+
assert.strictEqual(app.selectNextPerson(), 'john'); // 確認選擇下一個人員的功能
59+
assert.deepStrictEqual(app.selected, ['Alice', 'john']); // 確認已選擇的人員列表
60+
assert.strictEqual(app.selectNextPerson(), 'Bob'); // 確認選擇下一個人員的功能
61+
assert.deepStrictEqual(app.selected, ['Alice', 'john', 'Bob']); // 確認已選擇的人員列表
62+
assert.strictEqual(app.selectNextPerson(), null); // 確認已無可選擇的人員
63+
});
64+
65+
// 測試 Application_notifySelected() 方法
66+
test('Application_notifySelected()', async () => {
67+
const app = new Application();
68+
const [people] = await app.getNames();
69+
app.selected = [...people];
70+
app.mailSystem.send = test.mock.fn(app.mailSystem.send);
71+
app.mailSystem.write = test.mock.fn(app.mailSystem.write);
72+
app.notifySelected();
73+
assert.strictEqual(app.mailSystem.send.mock.calls.length, people.length); // 確認發送郵件的次數
74+
assert.strictEqual(app.mailSystem.write.mock.calls.length, people.length); // 確認編寫郵件的次數
75+
});

lab3/main_test.js

Lines changed: 0 additions & 5 deletions
This file was deleted.

lab4/main_test.js

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,36 @@ const puppeteer = require('puppeteer');
88
// Navigate the page to a URL
99
await page.goto('https://pptr.dev/');
1010

11-
// Hints:
11+
// Wait for the search button to appear
12+
await page.waitForSelector('.DocSearch.DocSearch-Button');
13+
1214
// Click search button
15+
await page.click('.DocSearch.DocSearch-Button');
16+
17+
// Wait for the search input box to appear
18+
await page.waitForSelector('#docsearch-input');
19+
1320
// Type into search box
21+
await page.type('#docsearch-input', 'chipi chipi chapa chapa');
22+
1423
// Wait for search result
24+
await page.waitForSelector('.devsite-result-item-link');
25+
1526
// Get the `Docs` result section
27+
const docSection = await page.$('.devsite-result-item-link');
28+
1629
// Click on first result in `Docs` section
30+
await docSection.click();
31+
1732
// Locate the title
33+
const titleElement = await page.waitForSelector('h1');
34+
35+
// Get the text content of the title element
36+
const title = await page.evaluate(titleElement => titleElement.textContent, titleElement);
37+
1838
// Print the title
39+
console.log(title);
1940

2041
// Close the browser
2142
await browser.close();
22-
})();
43+
})();

0 commit comments

Comments
 (0)