mirror of
https://github.com/kou029w/jest-hands-on.git
synced 2025-01-31 22:08:00 +00:00
create project
This commit is contained in:
parent
0c8620d3bb
commit
73a039d76f
16 changed files with 7014 additions and 0 deletions
4
.gitignore
vendored
Normal file
4
.gitignore
vendored
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
/dist/
|
||||||
|
/node_modules/
|
||||||
|
/.cache/
|
||||||
|
/.parcel-cache/
|
3
README.md
Normal file
3
README.md
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
# Jest ハンズオン
|
||||||
|
|
||||||
|
[![Edit in CodeSandbox](https://codesandbox.io/static/img/play-codesandbox.svg)](https://codesandbox.io/s/github/kou029w/jest-hands-on)
|
1
codesandbox.config.json
Normal file
1
codesandbox.config.json
Normal file
|
@ -0,0 +1 @@
|
||||||
|
{ "template": "parcel" }
|
56
index.html
Normal file
56
index.html
Normal file
|
@ -0,0 +1,56 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="ja" dir="ltr">
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8" />
|
||||||
|
<meta name="viewport" content="width=device-width" />
|
||||||
|
<title>jest-hands-on</title>
|
||||||
|
<!-- @license https://cdn.jsdelivr.net/npm/@exampledev/new.css/LICENSE -->
|
||||||
|
<link
|
||||||
|
rel="stylesheet"
|
||||||
|
href="https://cdn.jsdelivr.net/npm/@exampledev/new.css/new.min.css"
|
||||||
|
/>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h1>Jest ハンズオン</h1>
|
||||||
|
<p>CodeSandboxの場合、[Tests]のパネルを開いて、テスト結果を確認します。</p>
|
||||||
|
<iframe
|
||||||
|
src="https://codesandbox.io/embed/github/kou029w/jest-hands-on?codemirror=1&module=%2Fsrc%2Fsum.test.js&previewwindow=tests"
|
||||||
|
style="
|
||||||
|
width: 100%;
|
||||||
|
height: 500px;
|
||||||
|
border: 0;
|
||||||
|
border-radius: 4px;
|
||||||
|
overflow: hidden;
|
||||||
|
"
|
||||||
|
></iframe>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
ローカル環境の場合、
|
||||||
|
<code>npm test</code>
|
||||||
|
コマンドを実行して、テスト結果を確認します。
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<h2>ドキュメント</h2>
|
||||||
|
<p>
|
||||||
|
リファレンスとして
|
||||||
|
<a href="https://jestjs.io/ja/docs/getting-started">Jestのドキュメント</a>
|
||||||
|
を使用します。ご参照ください。
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<h2>構成</h2>
|
||||||
|
<p>
|
||||||
|
src/*.test.js がテスト本体です。
|
||||||
|
ファイルを配置することによって実行可能です。
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<li>はじめましょう … sum.js, sum.test.js</li>
|
||||||
|
<li>
|
||||||
|
Matcherを使用する … toBe.test.js, toEqual.test.js, notToBe.test.js
|
||||||
|
</li>
|
||||||
|
<li>非同期コードのテスト … callback.test.js, promise.test.js</li>
|
||||||
|
<li>セットアップと破棄 … setupTeardown.test.js, scope.test.js</li>
|
||||||
|
<li>モック関数 … mock.test.js</li>
|
||||||
|
</ul>
|
||||||
|
</body>
|
||||||
|
</html>
|
15
package.json
Normal file
15
package.json
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
{
|
||||||
|
"name": "jest-hands-on",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"private": true,
|
||||||
|
"license": "CC0-1.0",
|
||||||
|
"scripts": {
|
||||||
|
"test": "jest",
|
||||||
|
"start": "parcel index.html --open",
|
||||||
|
"build": "parcel build index.html"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"jest": "^27.0.6",
|
||||||
|
"parcel": "^2.0.0-beta.3.1"
|
||||||
|
}
|
||||||
|
}
|
26
src/callback.test.js
Normal file
26
src/callback.test.js
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
/** @license https://github.com/facebook/jest/blob/master/LICENSE */
|
||||||
|
|
||||||
|
// ダミー
|
||||||
|
const fetchData = (callback) => callback("peanut butter");
|
||||||
|
|
||||||
|
// 実行しないでください!
|
||||||
|
test.skip("the data is peanut butter", () => {
|
||||||
|
function callback(data) {
|
||||||
|
expect(data).toBe("peanut butter");
|
||||||
|
}
|
||||||
|
|
||||||
|
fetchData(callback);
|
||||||
|
});
|
||||||
|
|
||||||
|
test("the data is peanut butter", (done) => {
|
||||||
|
function callback(data) {
|
||||||
|
try {
|
||||||
|
expect(data).toBe("peanut butter");
|
||||||
|
done();
|
||||||
|
} catch (error) {
|
||||||
|
done(error);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fetchData(callback);
|
||||||
|
});
|
26
src/mock.test.js
Normal file
26
src/mock.test.js
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
/** @license https://github.com/facebook/jest/blob/master/LICENSE */
|
||||||
|
|
||||||
|
function forEach(items, callback) {
|
||||||
|
for (let index = 0; index < items.length; index++) {
|
||||||
|
callback(items[index]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const mockCallback = jest.fn((x) => 42 + x);
|
||||||
|
forEach([0, 1], mockCallback);
|
||||||
|
|
||||||
|
test("このモック関数は2回呼ばれます", () => {
|
||||||
|
expect(mockCallback.mock.calls.length).toBe(2);
|
||||||
|
});
|
||||||
|
|
||||||
|
test("このモック関数の最初の呼び出しのときの第1引数はゼロです", () => {
|
||||||
|
expect(mockCallback.mock.calls[0][0]).toBe(0);
|
||||||
|
});
|
||||||
|
|
||||||
|
test("このモック関数の2回目の呼び出しのときの第1引数は1です", () => {
|
||||||
|
expect(mockCallback.mock.calls[1][0]).toBe(1);
|
||||||
|
});
|
||||||
|
|
||||||
|
test("このモック関数の最初の呼び出しのときの戻り値は42です", () => {
|
||||||
|
expect(mockCallback.mock.results[0].value).toBe(42);
|
||||||
|
});
|
9
src/notToBe.test.js
Normal file
9
src/notToBe.test.js
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
/** @license https://github.com/facebook/jest/blob/master/LICENSE */
|
||||||
|
|
||||||
|
test("adding positive numbers is not zero", () => {
|
||||||
|
for (let a = 1; a < 10; a++) {
|
||||||
|
for (let b = 1; b < 10; b++) {
|
||||||
|
expect(a + b).not.toBe(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
23
src/promise.test.js
Normal file
23
src/promise.test.js
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
/** @license https://github.com/facebook/jest/blob/master/LICENSE */
|
||||||
|
|
||||||
|
// ダミー
|
||||||
|
const fetchData = () => Promise.resolve("peanut butter");
|
||||||
|
|
||||||
|
test("the data is peanut butter", () => {
|
||||||
|
return fetchData().then((data) => {
|
||||||
|
expect(data).toBe("peanut butter");
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
test("the data is peanut butter", () => {
|
||||||
|
return expect(fetchData()).resolves.toBe("peanut butter");
|
||||||
|
});
|
||||||
|
|
||||||
|
test("the data is peanut butter", async () => {
|
||||||
|
const data = await fetchData();
|
||||||
|
expect(data).toBe("peanut butter");
|
||||||
|
});
|
||||||
|
|
||||||
|
test("the data is peanut butter", async () => {
|
||||||
|
await expect(fetchData()).resolves.toBe("peanut butter");
|
||||||
|
});
|
14
src/scope.test.js
Normal file
14
src/scope.test.js
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
/** @license https://github.com/facebook/jest/blob/master/LICENSE */
|
||||||
|
|
||||||
|
beforeAll(() => console.log("1 - beforeAll"));
|
||||||
|
afterAll(() => console.log("1 - afterAll"));
|
||||||
|
beforeEach(() => console.log("1 - beforeEach"));
|
||||||
|
afterEach(() => console.log("1 - afterEach"));
|
||||||
|
test("", () => console.log("1 - test"));
|
||||||
|
describe("Scoped / Nested block", () => {
|
||||||
|
beforeAll(() => console.log("2 - beforeAll"));
|
||||||
|
afterAll(() => console.log("2 - afterAll"));
|
||||||
|
beforeEach(() => console.log("2 - beforeEach"));
|
||||||
|
afterEach(() => console.log("2 - afterEach"));
|
||||||
|
test("", () => console.log("2 - test"));
|
||||||
|
});
|
60
src/setupTeardown.test.js
Normal file
60
src/setupTeardown.test.js
Normal file
|
@ -0,0 +1,60 @@
|
||||||
|
/** @license https://github.com/facebook/jest/blob/master/LICENSE */
|
||||||
|
|
||||||
|
// ダミー
|
||||||
|
const initializeCityDatabase = async () => {
|
||||||
|
console.log("Cityデータベースの初期化処理");
|
||||||
|
};
|
||||||
|
const clearCityDatabase = async () => {
|
||||||
|
console.log("Cityデータベースの消去");
|
||||||
|
};
|
||||||
|
const isCity = (city) => {
|
||||||
|
// …なにかデータベースに依存する処理
|
||||||
|
|
||||||
|
console.log(`${city} は都市です`);
|
||||||
|
return true;
|
||||||
|
};
|
||||||
|
|
||||||
|
beforeEach(async () => {
|
||||||
|
await initializeCityDatabase();
|
||||||
|
});
|
||||||
|
|
||||||
|
afterEach(async () => {
|
||||||
|
await clearCityDatabase();
|
||||||
|
});
|
||||||
|
|
||||||
|
beforeAll(async () => {
|
||||||
|
await initializeCityDatabase();
|
||||||
|
});
|
||||||
|
|
||||||
|
afterAll(async () => {
|
||||||
|
await clearCityDatabase();
|
||||||
|
});
|
||||||
|
|
||||||
|
// ダミー
|
||||||
|
const initializeFoodDatabase = async () => {
|
||||||
|
console.log("Foodデータベースの初期化処理");
|
||||||
|
};
|
||||||
|
const isValidCityFoodPair = () => true;
|
||||||
|
|
||||||
|
test("city database has Vienna", () => {
|
||||||
|
expect(isCity("Vienna")).toBeTruthy();
|
||||||
|
});
|
||||||
|
|
||||||
|
test("city database has San Juan", () => {
|
||||||
|
expect(isCity("San Juan")).toBeTruthy();
|
||||||
|
});
|
||||||
|
|
||||||
|
describe("matching cities to foods", () => {
|
||||||
|
// このdescribeブロックのテストにのみ適用されます
|
||||||
|
beforeEach(async () => {
|
||||||
|
await initializeFoodDatabase();
|
||||||
|
});
|
||||||
|
|
||||||
|
test("Vienna <3 veal", () => {
|
||||||
|
expect(isValidCityFoodPair("Vienna", "Wiener Schnitzel")).toBe(true);
|
||||||
|
});
|
||||||
|
|
||||||
|
test("San Juan <3 plantains", () => {
|
||||||
|
expect(isValidCityFoodPair("San Juan", "Mofongo")).toBe(true);
|
||||||
|
});
|
||||||
|
});
|
6
src/sum.js
Normal file
6
src/sum.js
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
/** @license https://github.com/facebook/jest/blob/master/LICENSE */
|
||||||
|
|
||||||
|
function sum(a, b) {
|
||||||
|
return a + b;
|
||||||
|
}
|
||||||
|
module.exports = sum;
|
7
src/sum.test.js
Normal file
7
src/sum.test.js
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
/** @license https://github.com/facebook/jest/blob/master/LICENSE */
|
||||||
|
|
||||||
|
const sum = require("./sum");
|
||||||
|
|
||||||
|
test("adds 1 + 2 to equal 3", () => {
|
||||||
|
expect(sum(1, 2)).toBe(3);
|
||||||
|
});
|
5
src/toBe.test.js
Normal file
5
src/toBe.test.js
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
/** @license https://github.com/facebook/jest/blob/master/LICENSE */
|
||||||
|
|
||||||
|
test("two plus two is four", () => {
|
||||||
|
expect(2 + 2).toBe(4);
|
||||||
|
});
|
7
src/toEqual.test.js
Normal file
7
src/toEqual.test.js
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
/** @license https://github.com/facebook/jest/blob/master/LICENSE */
|
||||||
|
|
||||||
|
test("object assignment", () => {
|
||||||
|
const data = { one: 1 };
|
||||||
|
data["two"] = 2;
|
||||||
|
expect(data).toEqual({ one: 1, two: 2 });
|
||||||
|
});
|
Loading…
Add table
Reference in a new issue