angular-testing
这是一篇流水账式记录angular测试时遇到的问题和想法。
在这个项目内的api.service
,我注入了HttpClient
、NzNotificationService
、router
三个服务。
在测试api.service
时,你测试的是router
服务的navigate
方法有没有被调用,而且输入什么参数。这时,你要使用jasmine
的spy
监视对router
下的navigate
方法。而不是,检查浏览器地址栏是否有发生变化。
难道我们就不要检查浏览器地址栏的变化吗?其实,还是要的。不过,这应该是交给router
服务本身的测试来做。这才是模块化的思想,各模块能独立加载,有自身的单元测试。
然后,是对登录页组件的测试。对于login.spec.ts
这个测试文件的内容,主要还是记录下jasmine.createSpyObj
这个方法。我用这个方法创建了一个AuthService
的spy
。这个spy
是监视点击登录按钮时,触发的组件内的submit
函数。submit
执行时会调用AuthService
的login
方法。此时,我们不需要用httpMock
方式来模拟网络请求数据了,可以直接调用AuthService.login
(这个服务和方法现在是jasmine
创建的spy
)下的returnValue
来立刻返回结果,这样我们就可以直接测试authService.login.subscribe
回调函数内的代码。
那为什么可以不用httpMock
模拟网络请求呢?这就是上面提到的各自独立加载和有测试单元了。我们已经对AuthService
这个服务写过单元测试了,保证了他的功能正常。然后,到我们的对组件测试时,我们就没必要再重复这个模拟过程了。