如何测试独立的打字稿文件?
How to test a standalone typescript file?
我有一个 typescript 文件,它是 运行 独立的:
(async () => {
try {
const notificationService = new NotificationService();
notificationService.notify('test');
} catch (err) {
logger.error(err, `error while running ${SERVICE_NAME}`);
process.exit(1);
}
})();
我想知道如何使用开玩笑来测试它,例如断言已调用 notify()。
我认为不可能像这样测试文件。但是,可以轻松测试函数和 类。一般准则是,如果难以测试,您应该重构。
那么你不如将其重构为一个命名和导出的函数。
export async bootNotificationService() {
try {
const notificationService = new NotificationService();
notificationService.notify('test');
} catch (err) {
logger.error(err, `error while running ${SERVICE_NAME}`);
process.exit(1);
}
}
现在您可以导入该函数,模拟 jest.spyOn(process, 'exit')
,可能模拟 NotificationService
,然后 运行 函数。
现在可以将此代码替换为:
import bootNotificationService from './boot-notification-service'
bootNotificationService()
您无法轻松测试此文件,但至少您可以测试此文件调用的代码。
我有一个 typescript 文件,它是 运行 独立的:
(async () => {
try {
const notificationService = new NotificationService();
notificationService.notify('test');
} catch (err) {
logger.error(err, `error while running ${SERVICE_NAME}`);
process.exit(1);
}
})();
我想知道如何使用开玩笑来测试它,例如断言已调用 notify()。
我认为不可能像这样测试文件。但是,可以轻松测试函数和 类。一般准则是,如果难以测试,您应该重构。
那么你不如将其重构为一个命名和导出的函数。
export async bootNotificationService() {
try {
const notificationService = new NotificationService();
notificationService.notify('test');
} catch (err) {
logger.error(err, `error while running ${SERVICE_NAME}`);
process.exit(1);
}
}
现在您可以导入该函数,模拟 jest.spyOn(process, 'exit')
,可能模拟 NotificationService
,然后 运行 函数。
现在可以将此代码替换为:
import bootNotificationService from './boot-notification-service'
bootNotificationService()
您无法轻松测试此文件,但至少您可以测试此文件调用的代码。