在使用 Karma + Jasmine 进行angular 单元测试的时候,一直报 $httpbackend unexpected requeest 错误 ,提示的是请求的一个html文件,后来才发现是因为用了ui-router进行路由,并且存在抽象状态的问题,记录一下解决办法。

下载 stateMock.js,

把 stateMock.js 添加到 karma.config.js 里边。

测试文件中:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28

var $state ;
var $httpbackend;
var httpHandler;

beforeEach(module('stateMock'));

beforeEach(inject(function(_$state_,_$httpbackend_){

$state = _$state_;
$httpbackend = _$httpbackend_;

httpHandler = $httpbackend.when('GET', '/service/list').respond(/*xxx*/)

}));

it('http',function(){

$state.go('user.service');

$http.get('/service/list');

$httpBackend.expectGET('/service/list');

//.....


})

这样就可以避免请求了html而导致测试失败。、

参考

http://stackoverflow.com/questions/23655307/ui-router-interfers-with-httpbackend-unit-test-angular-js/23670198#23670198

https://github.com/meanjs/mean/issues/198