七步学会TypeScript - 第七步-综合练习

本文详细描述了如何开发一个简单的命令行待办事项管理应用,包括选择项目类型、设计项目结构、实现添加、列出和完成任务功能,以及使用Jest进行单元测试的过程和测试调试方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

让我们模拟一下一个简单的待办事项管理应用的开发过程。我们将按照下面的步骤一步步进行。

步骤 1:选择项目类型
我们选择开发一个命令行的待办事项管理工具,用户可以添加、列出和完成待办事项。

步骤 2:设计项目结构
我们将项目分为几个模块:

  • todo.ts:主要逻辑和命令行交互
  • task.ts:待办事项任务相关逻辑
  • utils.ts:一些辅助函数

步骤 3:实现功能

// task.ts
export interface Task {
  id: number;
  description: string;
  done: boolean;
}

let tasks: Task[] = [];
let currentId = 1;

export function addTask(description: string): void {
  tasks.push({ id: currentId, description, done: false });
  currentId++;
}

export function listTasks(): void {
  tasks.forEach(task => {
    const status = task.done ? "Done" : "Not done";
    console.log(`${task.id}. ${task.description} (${status})`);
  });
}

export function completeTask(id: number): void {
  const task = tasks.find(task => task.id === id);
  if (task) {
    task.done = true;
  }
}
// todo.ts
import { addTask, listTasks, completeTask } from "./task";
import * as readline from "readline";

const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout
});

function prompt() {
  rl.question("Enter command (add/list/complete/quit): ", answer => {
    if (answer === "add") {
      rl.question("Enter task description: ", description => {
        addTask(description);
        console.log("Task added.");
        prompt();
      });
    } else if (answer === "list") {
      listTasks();
      prompt();
    } else if (answer === "complete") {
      rl.question("Enter task id to complete: ", id => {
        completeTask(parseInt(id));
        console.log("Task marked as completed.");
        prompt();
      });
    } else if (answer === "quit") {
      rl.close();
    } else {
      console.log("Invalid command.");
      prompt();
    }
  });
}

prompt();

步骤 4:添加单元测试

我们使用 Jest 进行单元测试。

// task.test.ts
import { addTask, completeTask, listTasks } from "./task";

test("Add and list tasks", () => {
  addTask("Buy groceries");
  addTask("Read a book");
  const logSpy = jest.spyOn(console, "log");
  listTasks();
  expect(logSpy).toHaveBeenCalledWith("1. Buy groceries (Not done)");
  expect(logSpy).toHaveBeenCalledWith("2. Read a book (Not done)");
  logSpy.mockRestore();
});

test("Complete task", () => {
  completeTask(1);
  const logSpy = jest.spyOn(console, "log");
  listTasks();
  expect(logSpy).toHaveBeenCalledWith("1. Buy groceries (Done)");
  expect(logSpy).toHaveBeenCalledWith("2. Read a book (Not done)");
  logSpy.mockRestore();
});

步骤 5:测试和调试

运行测试:npx jest

运行应用:node todo.js

在命令行中尝试添加、列出和完成待办事项,同时观察测试是否通过。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值