」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 使用 Jest 測試您的 JavaScript 應用程式

使用 Jest 測試您的 JavaScript 應用程式

發佈於2024-09-01
瀏覽:682

Test Your JavaScript App With Jest

測試是軟體開發的關鍵部分,可確保您的應用程式能如預期運作。 Jest 是 JavaScript 生態系統中最受歡迎的測試框架之一。 Jest 由 Facebook 開發,以其簡單易用而聞名,使其成為初學者和經驗豐富的開發人員的絕佳選擇。

開始使用 Jest

在我們深入範例之前,讓我們在您的專案中設定 Jest。如果尚未安裝,可以使用 npm 安裝它:

npm install --save-dev jest

接下來,將測試腳本新增至您的 package.json 中:

"scripts": {
  "test": "jest"
}

現在您已經準備好要寫一些測試了!
讓我們建立一個簡單的函數來測試。建立一個名為 math.js 的檔案:

// math.js
function add(a, b) {
  return a   b;
}
module.exports = add;

現在,讓我們為這個函數寫一個測試。建立一個名為 math.test.js 的檔案:

// math.test.js
const add = require('./math');

test('adds 1   2 to equal 3', () => {
  expect(add(1, 2)).toBe(3);
});

在這個測試中,我們使用測試函數來定義測試案例。 Expect函數用來斷言add(1, 2)的結果等於3。

運行測試

您可以透過在終端機中執行以下命令來執行測試:

npm test

您應該看到表明您的測試已通過的輸出。

測試非同步程式碼

Jest 也支援測試非同步程式碼。讓我們修改 math.js 檔案以包含非同步函數:

// math.js
function fetchData() {
  return new Promise((resolve) => {
    setTimeout(() => {
      resolve('peanut butter');
    }, 1000);
  });
}

module.exports = { add, fetchData };

現在,讓我們為 fetchData 寫一個測試:

// math.test.js
const { add, fetchData } = require('./math');

test('adds 1   2 to equal 3', () => {
  expect(add(1, 2)).toBe(3);
});

test('fetches data', async () => {
  const data = await fetchData();
  expect(data).toBe('peanut butter');
});

在此測試中,我們將測試函數標記為非同步並使用await 等待promise 解析。

模擬函數

Jest 提供了強大的模擬功能。假設您有一個進行 API 呼叫的函數。您可以模擬此函數以在測試期間控制其行為。
這是一個例子:

// api.js
const axios = require('axios');

async function getUser() {
  const response = await axios.get('https://api.example.com/user');
  return response.data;
}

module.exports = getUser;

您可以在測試中模擬 axios:

// api.test.js
const axios = require('axios');
const getUser = require('./api');

jest.mock('axios');

test('fetches user data', async () => {
  const user = { name: 'John Doe' };
  axios.get.mockResolvedValue({ data: user });

  const result = await getUser();
  expect(result).toEqual(user);
});

在此測試中,我們模擬 axios.get 方法以傳回預先定義的回應,從而允許我們在不進行實際 API 呼叫的情況下測試 getUser。

Jest 是一個功能強大的測試框架,可以輕鬆為 JavaScript 應用程式編寫和運行測試。憑藉其簡單的語法、對非同步程式碼的支援以及內建的類比功能,Jest 可以幫助您確保程式碼的可靠性和可維護性。立即開始將 Jest 整合到您的專案中,享受自動化測試的好處。

版本聲明 本文轉載於:https://dev.to/jospin6/test-your-javascript-app-with-jest-314c?1如有侵犯,請聯絡[email protected]刪除
最新教學 更多>
  • HTML格式標籤
    HTML格式標籤
    HTML 格式化元素 **HTML Formatting is a process of formatting text for better look and feel. HTML provides us ability to format text without us...
    程式設計 發佈於2025-03-13
  • 如何使用FormData()處理多個文件上傳?
    如何使用FormData()處理多個文件上傳?
    )處理多個文件輸入時,通常需要處理多個文件上傳時,通常是必要的。 The fd.append("fileToUpload[]", files[x]); method can be used for this purpose, allowing you to send multi...
    程式設計 發佈於2025-03-13
  • 如何使用Glob在子文件夾中搜索特定文件?
    如何使用Glob在子文件夾中搜索特定文件?
    搜索散佈在不同文件夾和子文件夾中的大量文件可能是一項艱鉅的任務。但是,PHP的Glob函數提供了一個多功能解決方案來應對這一挑戰。 最初的嘗試使用Glob在根目錄中搜索搜索。要將其覆蓋範圍擴展到根之外,請考慮以下兩種方法: 1。帶有rglob函數的遞歸環球: RGLOB函數通過啟用遞歸搜索來增強G...
    程式設計 發佈於2025-03-13
  • 版本5.6.5之前,使用current_timestamp與時間戳列的current_timestamp與時間戳列有什麼限制?
    版本5.6.5之前,使用current_timestamp與時間戳列的current_timestamp與時間戳列有什麼限制?
    在時間戳列上使用current_timestamp或MySQL版本中的current_timestamp或在5.6.5 此限制源於遺留實現的關注,這些限制需要對當前的_timestamp功能進行特定的實現。 創建表`foo`( `Productid` int(10)unsigned not ...
    程式設計 發佈於2025-03-13
  • 如何為PostgreSQL中的每個唯一標識符有效地檢索最後一行?
    如何為PostgreSQL中的每個唯一標識符有效地檢索最後一行?
    postgresql:為每個唯一標識符在postgresql中提取最後一行,您可能需要遇到與數據集合中每個不同標識的信息相關的信息。考慮以下數據:[ 1 2014-02-01 kjkj 在數據集中的每個唯一ID中檢索最後一行的信息,您可以在操作員上使用Postgres的有效效率: id dat...
    程式設計 發佈於2025-03-13
  • Java是否允許多種返回類型:仔細研究通用方法?
    Java是否允許多種返回類型:仔細研究通用方法?
    在Java中的多個返回類型:一種誤解類型:在Java編程中揭示,在Java編程中,Peculiar方法簽名可能會出現,可能會出現,使開發人員陷入困境,使開發人員陷入困境。 getResult(string s); ,其中foo是自定義類。該方法聲明似乎擁有兩種返回類型:列表和E。但這確實是如此嗎...
    程式設計 發佈於2025-03-13
  • 我應該在班上創建災難嗎?
    我應該在班上創建災難嗎?
    何時需要創建析構函數? 在類設計中,開發者經常會糾結是否需要創建析構函數。 然而,理解析構函數的恰當用法至關重要。 創建析構函數的原因 通常只有當類持有昂貴的非託管資源(例如數據庫連接或文件句柄)時,才需要析構函數。在這種情況下,析構函數負責在不再需要對象時釋放這些資源,確保正確清理。 析...
    程式設計 發佈於2025-03-13
  • 我可以將加密從McRypt遷移到OpenSSL,並使用OpenSSL遷移MCRYPT加密數據?
    我可以將加密從McRypt遷移到OpenSSL,並使用OpenSSL遷移MCRYPT加密數據?
    將我的加密庫從mcrypt升級到openssl 問題:是否可以將我的加密庫從McRypt升級到OpenSSL?如果是這樣,如何? 答案:是的,可以將您的Encryption庫從McRypt升級到OpenSSL。 可以使用openssl。 附加說明: [openssl_decrypt()函數要求...
    程式設計 發佈於2025-03-13
  • 如何限制動態大小的父元素中元素的滾動範圍?
    如何限制動態大小的父元素中元素的滾動範圍?
    在交互式接口中實現垂直滾動元素的CSS高度限制,控制元素的滾動行為對於確保用戶體驗和可訪問性是必不可少的。一種這樣的方案涉及限制動態大小的父元素中元素的滾動範圍。 問題:考慮一個佈局,其中我們具有與用戶垂直滾動一起移動的可滾動地圖div,同時與固定的固定sidebar保持一致。但是,地圖的滾動無限...
    程式設計 發佈於2025-03-13
  • 如何從PHP中的數組中提取隨機元素?
    如何從PHP中的數組中提取隨機元素?
    從陣列中的隨機選擇,可以輕鬆從數組中獲取隨機項目。考慮以下數組:; 從此數組中檢索一個隨機項目,利用array_rand( array_rand()函數從數組返回一個隨機鍵。通過將$項目數組索引使用此鍵,我們可以從數組中訪問一個隨機元素。這種方法為選擇隨機項目提供了一種直接且可靠的方法。
    程式設計 發佈於2025-03-13
  • 為什麼使用固定定位時,為什麼具有100%網格板柱的網格超越身體?
    為什麼使用固定定位時,為什麼具有100%網格板柱的網格超越身體?
    網格超過身體,用100%grid-template-columns 為什麼在grid-template-colms中具有100%的顯示器,當位置設置為設置的位置時,grid-template-colly修復了? 問題: 考慮以下CSS和html: class =“ snippet-code”> ...
    程式設計 發佈於2025-03-13
  • 在PHP和MySQL中如何將日期格式化為dd/mm/yyyy?
    在PHP和MySQL中如何將日期格式化為dd/mm/yyyy?
    如何以dd/mm/yyyy格式顯示php mysql 答案: 使用strtotime iniester erie for intertotime(&&&&&&&&&&&&&&&得到,使用date()。 example: $ timestamp = strtotime($ date_from...
    程式設計 發佈於2025-03-13
  • 為什麼儘管有效代碼,為什麼在PHP中捕獲輸入?
    為什麼儘管有效代碼,為什麼在PHP中捕獲輸入?
    在php ;?>" method="post">The intention is to capture the input from the text box and display it when the submit button is clicked.但是,輸出...
    程式設計 發佈於2025-03-13
  • 在Python中如何將集合劃分為所有可能的子集?
    在Python中如何將集合劃分為所有可能的子集?
    在python 手頭的任務是將一組元素分配到所有可能的子集中。例如,分區[1,2,3]產生以下子集: [[1],[2],[3]],[3]] [[1,2],[3]] [[1],[2,3]] [[1,3],[2]] [[1,2,3]] 遞歸解決方案 def partition(collection):...
    程式設計 發佈於2025-03-13
  • 如何使用PHP將斑點(圖像)正確插入MySQL?
    如何使用PHP將斑點(圖像)正確插入MySQL?
    essue VALUES('$this->image_id','file_get_contents($tmp_image)')";This code builds a string in PHP, but the function call fil...
    程式設計 發佈於2025-03-13

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3