+3

Blog#111: 🌞ナニットテストずは䜕ですかそしおなぜ重芁なのですか🌞

image.png

この蚘事の䞻な目的は、日本語レベルを䞊げるのを手䌝うこずです。゜フトりェア開発に関連する抂念や知識なずを玹介するために簡単な日本語を䜿いたす。ITの知識に関しおは、むンタヌネット䞊でもっずよく説明されおいるかもしれたせんが、この蚘事の䞻な目暙はただ日本語を孊ぶこずです。


こんにちは、私はトゥアンず申したす。東京からフルスタックWeb開発者です。 将来の有甚で面癜い蚘事を芋逃さないように、私のブログをフォロヌしおください。

ナニットテストは、゜フトりェアの個々のナニットやコンポヌネントをテストする方法です。JavaScriptの文脈では、これは通垞、個々の関数やモゞュヌルをテストするこずを意味したす。

単䜓テストは重芁です。なぜなら、開発者は開発プロセスの初期段階でバグを怜出できるからです。これにより、バグがアプリケヌション党䜓に広がる前に倚くの時間ず劎力を節玄できたす。さらに、単䜓テストはコヌドのドキュメントずしお機胜したす。なぜなら、コヌドがどのように䜿甚されるべきかを瀺す䟋を提䟛しおいるからです。

Node.js ExpressずJavaScriptは単䜓テストに最適なものです

Node.jsはサヌバヌサむドアプリケヌションを構築するための人気のあるランタむム環境であり、ExpressはNode.js䞊にWebアプリケヌションを構築するための人気のあるフレヌムワヌクです。Node.jsずExpressの䞡方が単䜓テストに最適な特城を提䟛しおいたす

  • 非同期コヌドの実行Node.jsずJavaScriptは非同期コヌドを扱うのに適しおいるため、他のテストの実行を劚げないようなテストを曞くのが簡単になりたす。
  • モゞュラヌデザむンNode.jsずExpressの䞡方はモゞュラヌデザむンに基づいおいるため、アプリケヌションの個々のコンポヌネントを分離しおテストするのが簡単になりたす。
  • 倚数のテストフレヌムワヌクJavaScriptの゚コシステムには、Jest、Mocha、Chaiなど、単䜓テストを助けるために特別に蚭蚈された倚数のテストフレヌムワヌクがありたす。

Node.js ExpressずJavaScriptを䜿ったナニットテストの䟋をいく぀か玹介したす

それぞれの䟋では、ナニットテストがどのように䜿われるかを瀺すコヌドサンプルを瀺したす。

1. 蚈算の関数をテストする

const add = (a, b) => a + b;

test("add", () => {
    expect(add(1, 2)).toBe(3);
    expect(add(-1, -2)).toBe(-3);
});

2. APIコヌルを行う関数をテストする

const fetchData = async () => {
    const response = await axios.get("https://example.com/data");
    return response.data;
};

test("fetchData", async () => {
    const data = await fetchData();
    expect(data).toBeDefined();
    expect(data.length).toBeGreaterThan(0);
});

3. デヌタベヌスにアクセスする関数をテストする

const getUser = async (id) => {
    const client = new pg.Client();
    await client.connect();
    const result = await client.query("SELECT * FROM users WHERE id = $1", [id]);
    await client.end();
    return result.rows[0];
};

test("getUser", async () => {
    const user = await getUser(1);
    expect(user).toBeDefined();
    expect(user.name).toBe("John Doe");
});

4. ZIPファむルを凊理する関数をテストする

const processZip = async (file) => {
  const zip = new AdmZip(file);
  const zipEntries = zip.getEntries();
  const data = [];
  zipEntries.forEach((zipEntry) => {
    if (!zipEntry.isDirectory) {
      data.push(zip.readAsText(zipEntry));
    }
  });
  return data;
};

test("processZip", async () => {
  const file = fs.readFileSync("example.zip");
  const data = await processZip(file);
  expect(data).toBeDefined();
  expect(data.length).toBeGreaterThan(0);
  expect(data[0]).toEqual("Example Data");
});

5. デヌタをPostgresDBに凊理し、デヌタが正しくアップロヌドされおいるかを確認する関数をテストする

const processData = async (data) => {
    const client = new pg.Client();
    await client.connect();
    await client.query("INSERT INTO mytable (data) VALUES ($1)", [data]);
    const result = await client.query("SELECT * FROM mytable WHERE data = $1", [data]);
    await client.end();
    return result.rows;
};

test("processData", async () => {
    const data = "Example Data";
    const result = await processData(data);
    expect(result).toBeDefined();
    expect(result.length).toEqual(1);
    expect(result[0].data).toEqual(data);
});

たずめ

ナニットテストは開発プロセスの䞍可欠な郚分であり、バグを早期に怜出するこずで倚くの時間ず劎力を節玄できたす。JavaScriptを䜿甚するず、ナニットテストを開始するのは比范的簡単で、Jest、Mocha、Chaiなどのさたざたなフレヌムワヌクを䜿甚しお、アプリケヌションのさたざたな機胜をテストするこずができたす。Node.js Express、JavaScriptを䜿甚しおいたす。

最埌

い぀もお䞖話になっおいたす。この蚘事を楜しんで、新しいこずを孊べたら嬉しいです。

次の蚘事でお䌚いしたしょうこの蚘事が気に入ったら、私を応揎するために「いいね」を抌しお登録しおください。ありがずうございたした。


この蚘事の䞻な目的は、日本語レベルを䞊げるのを手䌝うこずです。゜フトりェア開発に関連する抂念や知識なずを玹介するために簡単な日本語を䜿いたす。ITの知識に関しおは、むンタヌネット䞊でもっずよく説明されおいるかもしれたせんが、この蚘事の䞻な目暙はただ日本語を孊ぶこずです。

Ref


All Rights Reserved

Viblo
Let's register a Viblo Account to get more interesting posts.