♻️
前端 TDD(测试驱动开发)
  • README
  • 总-课程目标
  • 总-课程安排
  • Coding
    • 第一题:FizzBuzz 数字游戏
      • 什么是 FizzBuzz?
      • 任务 0:练功前的热身
      • FizzBuzz 项目剖析
      • 任务 1:TDD 初体验
      • 任务 2:先利其器
      • 任务 3:再撸一遍
      • FizzBuzz 项目总结
      • 附录 1:Jest 测试基础及要点
      • 附录 2:Testing Library 组件测试基础
    • 第二题:MarsRover 火星车
      • 任务 1:Tasking 任务分解
      • 火星车实战
      • 火星车 Tasking 任务分解
      • 任务 2:MarsRover 实战演练
      • MarsRover Coding 演示
      • 任务 3:MarsRover 练习
      • MarsRover 项目总结
    • 第三题:CommentBox 留言板
      • CommentBox 项目剖析
      • 任务 1:Cypress E2E 测试
      • 任务 2:测试驱动组件单元接口
      • 任务 3:组件级别的快速反馈
      • 任务 4:由外到内的前端 TDD
      • CommentBox 项目总结
    • 第四题:Bookshelf 魔法书架
      • Bookshelf 项目剖析
      • 任务 1:练习 API 契约测试
      • 任务 2:组件化与数据流管理
      • 任务 3:Redux 数据流测试
      • 任务 4:简化 Redux 项目结构
      • Bookshelf 项目总结
      • 附录 1:什么才是真正的 RESTful 架构?
      • 附录 2:【译】Redux 和 命令模式
      • 附录 3:【译】什么是 Flux 架构?(兼谈 DDD 和 CQRS)
    • 第五题:ShoppingCart 购物车
      • ShoppingCart 项目剖析
      • React 哲学:Thinking in React
      • 任务 1:任务分解 - 驱动组件树拆分
      • 任务 2:综合应用 - 驱动组件接口设计
      • 任务 3:综合应用 - 驱动数据流管理
      • 任务 4:综合应用 - 驱动组件样式开发
      • ShoppingCart 项目总结
由 GitBook 提供支持
在本页
  • 实战准备
  • 准备代码
  • 熟悉框架
  • 输入指令
  • 火星车能识别的指令
  • 我希望你关注这几个问题:
  •  参考答案
  1. Coding
  2. 第二题:MarsRover 火星车

任务 2:MarsRover 实战演练

实战准备

接下来,我们可以开始执行各个子任务了。开始执行之前要回忆一下我们任务分解的两个核心:

  1. 任务各自独立

  2. 输入输出进行穷举

准备代码

git clone https://github.com/LeiZeng/tdd-marsrover

yarn install #安装依赖
yarn test #运行测试

------
PASS  src/dojo/marsRover.test.js
  Test MarsRover
    ✓ should return `1 3 N` given default commands (1ms)

Test Suites: 1 passed, 1 total
Tests:       1 passed, 1 total
Snapshots:   0 total
Time:        0.991s, estimated 1s
Ran all test suites related to changed files.

Watch Usage: Press w to show more.

熟悉框架

框架为大家准备了一个基础的 GUI 用于展示火星车的现状,以及文本控件便于调整火星车命令,通过命令yarn start或者npm start即可启动以下界面:

通过下方的输入框,可以输入火星车命令,我们需要解析火星车命令, 提供参数给 MarsGround 组件控制我们的火星车位置。

火星车的主要逻辑是对命令进行解析,我们为大家制作了以 GUI,但是还是需要你来为火星车解析指令。其中marsRover负责对输入指令进行解析,然后通过execute方法将指令解析为火星车能够识别的格式:

输入指令

5 5
1 2 N
LMLMLMLMM

火星车能识别的指令

const input = {
  X: 5,
  Y: 5,
  x: 0,
  y: 0,
  direction: 'N',
}

正确解析火星车指令后,输出界面中火星车的位置和朝向会做出对应改变。

我们可以看到 App.js 这个文件,其中marsRover是我们要完成的指令解析器:

import React from 'react'
import MarsRover from './components/Marsrover'
import marsRover from './dojo/marsRover'

const command = `5 5
1 2 N
LMLMLMLMM`

const parser = (input) => {
  marsRover.execute(input)
  return marsRover
}

export default function App() {
  return (
    <>
      <h1 data-testid="title">练功房前端脚手架</h1>
      <MarsRover command={command} parser={parser} />
    </>
  )
}

我们任务目标是实现dojo/marsRover.js, 让它可以解析火星车命令,并通过 excute方法返回火星车的位置和朝向。 我们在代码库构建了一个初始模版:

class MarsRover {
  execute(commandText) {
    return ''
  }
}

export default MarsRover

我希望你关注这几个问题:

  • 做完整道题用了多长时间?

  • 代码质量怎么样?

  • TDD 的方式顺畅吗?

  • 实际做的步骤,和一开始拆分的任务是否相同?

 参考答案

切换 git 分支,可以从 result 分支查看老师提供的标准答案。

上一页火星车 Tasking 任务分解下一页MarsRover Coding 演示

最后更新于5年前

MarsRover UI