[英]How to write unit test for javascript revealing module pattern with Jest?
[英]How do I write a unit test in jest for a class function in the database layer of my javascript web application?
我正在使用 jest 為我的 Express 應用程序編寫單元測試。 我是測試和使用 jest 的新手,所以我很難為代表我的應用程序的數據庫層的 class 函數編寫單元測試。 當我運行測試時,程序嘗試調用數據庫,但無法這樣做,落到了 catch 塊。 我在哪里 go 錯了? 謝謝你。
// 摘要.ts
import db from '../db/index';
import { generateError } from '../lib/generateError';
const SummaryModel = class {
static async findAll() {
const text = `SELECT * FROM public.summary`;
let result : any = {};
try {
result = await db.query(text);
} catch(e) {
if (e) {
throw generateError(500, 'could not query db');
}
}
const summaries = {
record: result.rows,
count: result.rowCount
}
return summaries;
}
}
export default SummaryModel;
// 摘要.test.js
const SummaryModel = require('../../../src/models/summary');
jest.mock('../../../src/models/summary');
test('should return an object with an array and number', async done => {
const summaries = await SummaryModel.default.findAll();
expect(typeof summaries.record).toBe('array');
expect(typeof summaries.count).toBe('number');
done();
});
// summary.test.js 已更新
const SummaryModel = require('../../../src/models/summary');
jest.mock('../../../src/models/summary');
test('should return an object with an array and number', async done => {
const SummaryModel = {
default: {
findAll: jest.fn()
},
}
const resp = {
record: [{},{}],
count: 2,
}
SummaryModel.default.findAll.mockResolvedValue(resp);
const summaries = await SummaryModel.default.findAll();
expect(summaries.record.length).toBe(2);
expect(summaries.count).toBe(2);
expect(typeof summaries.record).toBe('object');
expect(typeof summaries.count).toBe('number');
done();
});
這個想法是模擬通常由您的方法返回的值。 為此,您可以使用 function mockResolvedValue
繞過對 DB 的調用,並在每次調用findAll
時返回所需的測試數據。 例如,你可以有類似的東西:
SummaryModel.default.findAll.mockResolvedValue({
record: [{}, {}], // return some test data here
count: 2,
}
查看 Jest 文檔以了解如何模擬模塊。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.