步骤 6: 用 Karma 和 Jasmine 测试

对于那些不熟悉 Karma 的人来说,它是一个JavaScript测试器,与所测试的框架无关。这个 fountainjs generator 还包括了测试框架 Jasmine。当我们在这个 codelab 里用 generator ,在 mytodo 文件夹里生成源文件和 *.spec.js 文件前去运行 yo fountain-webapp ,会创建一个 conf/karma.conf.js 文件,并且用 Karma 把它推送到 Node 模块中。我们将编辑一个 Jasmine 脚本来描述我们的测试,但让我们看看我们如何运行测试。

运行单元测试

让我们回到命令行并且使用 Ctrl+C 杀掉本地服务器进程。这里已经存在了一个 npm 脚本构建出了我们的 package.json 去运行测试。我们能根据下面的命令去运行:

npm test

每个测试都应该通过。

更新单元测试

你可以在 src 文件夹里找到单元测试所生成的文件,你可以打开找到 src/app/reducers/todos.spec.js。这个就是 Todos 单元测试的还原剂。例如,我们得到的重点放在第一个,测试谁验证的初始状态。

it('should handle initial state', () => {
  expect(todos(undefined, {})).toEqual([
    {
      text: 'Use Redux',
      completed: false,
      id: 0
    }
  ]);
});

并用下列替换测试:

it('should handle initial state', () => {
  expect(todos(undefined, {})).toEqual([
    {
      text: 'Use Yeoman', // <=== HERE
      completed: false,
      id: 0
    }
  ]);
});

重新用 npm test 去运行我们的测试,我们应该可以看到测试现在失败 了。

如果你想当我们改变的时候自动进行测试,你可以使用 npm run test:auto 来替换。

打开 src/app/reducers/todos.js.

取代初始状态:

const initialState = [
  {
    text: 'Use Yeoman',
    completed: false,
    id: 0
  }
];

棒极了,你已经完成了测试:

编写单元测试能使它更容易捕捉到错误,因为你的应用程序会越来越大,并且会有更多的开发人员加入你的团队。Yeoman 的脚手架功能使编写单元测试更容易,所以没有理由不为自己的 app 写测试!;)

« 回到上一页 or 继续下一步 »