JavaScript 寺子屋 13 / 関数の定義ファイルとテストの定義ファイルを分ける
Tweet関数の定義ファイルとテストの定義ファイルを分ける
前回は、テストをかいた test.spec.js
の中に、関数の定義「も」書いていました。
しかしこれは実践的ではありません。
通常は、関数の定義とテストの定義は別々のファイルに書きます。
問題は、別々のファイルにあるものを、どうやって結びつけるかです。
そのためには export
と import
を使います。
まずは index.js
に関数の定義、test.spec.js
にテストとファイルを分ける
何はともあれ、関数の定義とテストの定義を別のファイルで行いましょう。
index.jsで関数を定義する
const check = strings => {
if (strings === "月") {
return "月です";
}
if (strings === "太陽") {
return "太陽です";
}
return "月でも太陽でもありません";
};
テストファイルの方には関数は書きません。
test.spec.js でテストを定義する
// ここには関数は書かない
describe("惑星のチェック関数のテスト", () => {
test("月の場合", () => {
const res = check("月");
expect(res).toEqual("月です");
});
test("太陽の場合", () => {
const res = check("太陽");
expect(res).toEqual("太陽です");
});
test("犬の場合", () => {
const res = check("犬");
expect(res).toEqual("月でも太陽でもありません");
});
test("数値の場合", () => {
const res = check(100);
expect(res).toEqual("月でも太陽でもありません");
});
});
するとテストが落ちるはずです。なぜなら、テスト内で実行する関数がないからです。
関数を export
/ テスト内でそれを import
する
ではこの二つのファイルを export
と import
で結びつけていきます。
export
が書き出すとか出力するという意味で、import
が取り込むとか輸入するという意味ですね。
関数を export
先ほど書いた関数定義のファイルの一番最後に export default check
と書き加えました。
check という関数を default
の値として出力するという意味です。「default
の値」が何のかということは今度やることにしましょう。とにかく今回はこれで出力することができます。
index.js で関数を定義する
const check = strings => {
if (strings === "月") {
return "月です";
}
if (strings === "太陽") {
return "太陽です";
}
return "月でも太陽でもありません";
};
export default check; // これ!!!
テスト内で関数を import
する
テストの方で、先ほど出力した関数を import
します。
そのためには冒頭に import check from "/src/index.js"
と書き加えます。
"/src/index.js"
から check
という変数へ import
するということです。これで check
に、別ファイルで定義した関数が入ってきます。
test.spec.js でテストを定義する
import check from "/src/index.js"; // これ!!!
describe("惑星のチェック関数のテスト", () => {
test("月の場合", () => {
const res = check("月");
expect(res).toEqual("月です");
});
test("太陽の場合", () => {
const res = check("太陽");
expect(res).toEqual("太陽です");
});
test("犬の場合", () => {
const res = check("犬");
expect(res).toEqual("月でも太陽でもありません");
});
test("数値の場合", () => {
const res = check(100);
expect(res).toEqual("月でも太陽でもありません");
});
});
テストを確認する
ここまでくれば、うまくテストが実行されるはずです。
宿題
- 以前自分が 寺子屋 12 で書いた関数とテストを使う
- 関数とテストを別々のファイルに定義する
- それぞれ
export/import
して、テストを正常に動かす
以上です!
これでついにテストをしながら JavaScript を学習する準備ができましたね!