用Karma和Jasmine测试Angular应用

时间:2022-10-27 16:52:03

TEST:

  • Before you’ve written any of the code, you know how you want it to behave. You have a specification for its behavior.

为什么需要测试

  • 当我们给程序添加了新功能后,可以run test来判断,新代码是否破坏了原有的程序。
  • a well-writen test能帮助,其他开发者,更容易理清程序是如何工作的。

TDD: test-driven development

BDD:behavior-driven development

karma配置:

Karma 可以用来启动一个应用服务器,并在其中运行测试代码和需要被测试的源码,并把测试结果打印到命令行。

#1测试框架 jasmine:

suite 与 specs

  • 一个Suite(describe)包含多个Specs(it),一个Specs(it)包含多个断言(expect)。

    • npm install --save-dev karma-jasmine
    • jasmine 需要 required.js, karma init 时,是否需要required.js时,应该选 true。
    • Each spec should test only one case or scenario at a time.
Jasmine 细则
describe('unit test main controller:',function(){
                describe('inner method',function(){})
            } )
    it('',function(){
    expect().toBe(true);
    })

匹配器

  • toBe 使用js的 === 来比较
  • toEqual
  • toMatch
  • toBeDefined
  • toBeUndefined
  • toBeNull
  • toBeTruthy
  • toBeFalsy
  • toBeContain 验证一个item是否是数组中的一项
  • toBeLessThan
  • toBeGreaterThan
  • toBeCloseTo ???
  • toThrow

高级匹配器

spy
  • toHaveBeenCalled:可以检查function是否被调用过,
  • toHaveBeenCalledWith: 可以检查传入参数是否被作为参数调用过。

beforeEach() 和 afterEach()

  • 带有一个函数作为参数,这个函数在没个细则(it)运行前/后 执行。

#2 Requirejs A JAVAScript module loader

- requirejs
- karma-requirejs

其他必须的依赖:

- karma-chrome-launcher
- karma-cli  ????

Tips

这里karma环境一直配不好的一个重要原因是,对requirejs不熟悉

karma.config.js files应该注意的问题:

  • 顺序
    • 模式的顺序决定了文件在浏览器里被加载的顺序
    • 如果多个文件匹配到同一个模式,按字母顺序加载
    • 每个文件只被加载一次,如果多个模式匹配到同一个文件,由第一个匹配到的模式加载

angular.mock 模块

  • module() 函数允许我们指定测试中用到的特定模块
  • inject() 函数只负责一件事,就是将服务注入测试。

测试服务

测试控制器: 需要创建新的scope 和 控制器实例,并将它们连接起来。

mock对象和异步代码测试

  • $timeout.flush();

  • 10 10 2016 17:05:15.077:INFO [karma]: Delaying execution, these browsers are not ready: Chrome 53.0.2785 (Windows 10 0.0.0)

  • Chrome is executing

    • 出现上述两个error : 是因为没有karma init时 没有生成requirejs的 入口文件 test.main.js
  • Angular的依赖注入机制,是可测试的保障。当一个应用有很多的依赖关系时,怎么做单元测试呢?

    • 其实很简单,一个app能运行,它的依赖关系都是处理好的,我们在karma的files配置中,引入压缩好的js文件就ok了,不用再测试一个控制器时,再一个一个处理它的依赖关系。
  • 对应版本的Angular 要下载对应版本的angular-mocks.js ,不然会出现错误。