Angular测试机床TestBed
Angular测试机床TestBed
- 用测试机床TestBed准备测试环境:
TestBed.configureTestingModule(
{
imports:[],
providers:[]
}
);
-imports引入需要的模块,如果有请求,则需要引入HttpClientTestingModule,使用HttpClientController拿到请求,并mock返回数据;
-providers注入相关的服务,互相依赖的服务都需要注入,使用了Http的需要引入HttpModule。
如果每个案例都需要准备测试环境,这个步骤可以放在beforeEach中。
- 通过TestBed获取实例
var service =TestBed.get(ServiceToken);
var testingController = TestBed.get(HttpTestingController);
....
- 针对请求的接口需要截获请求mock模拟返回数据
var req = httpClientContrller.expectOne({url:url,method:”POST”
});
req.flush(data);
- 返回数据与期望数据比较
expect(response).toBe toEqual...()
- 模拟报错
-req.error(new ErrorEvent(‘Network Error’,{message:”报错”}));
---------------------------更新---------------------------------
在实际开发过程中经常会遇到测试报错,No Provider for xxx。
原因如下,如果是对某个service测试,constructor如果引用到其他的service,需要在TestBed.configureTestingModule中imports相关的服务,或者直接在provider中注入相关的服务。注意是嵌套引用,如果引用的服务中又有其他的服务,都需要注入!!!!
一般可以这么做,新建一个TestServiceProviderModule然后在这个module中引入需要注入的服务。