拦截器是 AngularJS 内置的一个特性,你可以插入一个请求或者回调方法链,修改或者打断各终结点之间的逻辑流。但在 AngularJS 应用的单元测试中,拦截器是用来捕捉 XHR 请求, 以避免外部请求,因为它会触发内部路由(解析的时候),Controller,Service 甚至是 Directive (不要在 Directive上这样做 :P)。这就是一个单纯的 AngualrJS 方法,任何外部请求都会被过滤(比如你在做这些的时候用 $http),不过用拦截器会增加测试的复杂度和额外代码。因此如果你想避免拦截和 Mock,那么用 Midway 测试来对应你的路由, Controller, Service 和 Directive。
另一种避免 XHR 操作的方法是使用 Mock。Mock 是用来模拟提供请求的返回数据的。所以如果你有一个开销非常大的操作(比如说调用外部 API )的时候,它需要用很长时间来获取数据,那么最好的办法就是用 Mock 来欺骗你的代码,让它继续干接下来的事情而非等待。Mock 是一个非常有用的方法,用来分离测试代码,排除噪音。
AngularJS 提供了内部的 Mock 模块 angular-mocks.js,用于 单元测试(不是 Midway 或者 E2E 测试) 。 Karma 配置文件查找 / test 文件夹下面的每个测试文件,执行。记住一件事情,如果你打算在以后用 MochaJS 做单元测试,用 Bower 来管理 angular-mocks ,所以你可以确保 angular-mocks 最新。
来源:oschina
链接:https://my.oschina.net/u/1035386/blog/277487