我应该在AngularJS中测试什么?
如今,特别是在
angularjs测试领域,有很多指南用于进行不同类型的测试,如单元测试,中途测试和端到端测试,在这里您可以学习如何对控制器,工厂等进行不同的测试.
主题是,什么应该是可测试的?我可以测试我的模块应用程序有控制器,指令,成功登录,检查后端调用等.但我应该测试什么?,因为你可以测试所有的东西,可能它不是一个很好的做法“轻松测试”. 有人可以给我任何建议吗?谢谢. 解决方法
对于一般性答案,您可以查看此
question.
假设您对角度的单元测试是用Jasmine或类似的东西编写的,请注意Jasmine适用于“行为驱动开发”. 从this presentation开始: 另一个好的来源,但更严格(面向TDD或测试驱动开发)是Bob Martin的清洁代码.我最大的测试要点: >让测试成为您的文档 也就是说, >评论可能会过时,但单元测试必须响应变化才能通过.如果您按照BDD建议编写特定用户场景,这尤其重要. 例子: 作为一个粗略的例子,假设您需要一个应用程序来轮询给定城市的天气预报数据.您的用户或客户代码的要求可能类似于“给定一组天气数据,当我输入城市名称时,我应该获得5天的预测数据”.然后你可能会有一个测试: describe('Given a set of weather data'.... ... describe('when I enter Los Angeles',function() { it('should return 5 days of forecast data for Los Angeles',mocks.inject(function(weatherService) { var result = weatherService.getForecast('Los Angeles'); expect(result.DayToForecast.lenth).toEqual(5); })); }); ... 然后假设您有另一个要求,即天气数据说出有关湿度的信息,例如“给定一组天气数据,当我输入城市名称和日期时,我应该获得湿度数据” ... describe('When I enter Los Angeles and Monday',function() { it('should return humidity data for Los Angeles on Monday',mocks.inject(function(weatherService) { var result = weatherService.getForecast('Los Angeles'); expect(result.DayToForecast['Monday'].humidity).not.toBe(null); })); }); ... 在这里,我们并不真正关心结果的结构,只是它在某种程度上给出了星期一湿度的概念.我们并不关心weatherService的内部(例如,它是否从数据库,静态文件或其他Web服务获取数据).你可能会有这样的东西,但仍然表达了要求: ... describe('when I enter Los Angeles and Monday',mocks.inject(function(weatherService) { var result = weatherService.getForecast('Los Angeles','Monday'); expect(result.humidity).not.toBe(null); })); }); ... 这里很酷的事情是你可以“通过一厢情愿的思考” – 你创建靠近你的用户和用例的功能签名,然后填写它们,只获得你需要的东西.现在,如果您的第一个要求改变为“给定一组天气数据,我应该获得4天的预测数据”,您必须更改测试而不是搜索评论,而您只需要更改与该需求更改相关的代码. 您的某些行为可能未被您的用户明确说明.例如,对于上面的示例,最终用户不太可能比Web服务消费者客户端说:“给定一组天气数据,当我输入城市名称和虚构的一天时,我应该得到一个例外“你必须自己收集这个和测试用例: ... describe('when I enter Los Angeles and EigthDay',function() { it('should throw an exception',mocks.inject(function(weatherService) { var weatherServiceCall = function(){ weatherService.getForecast('Los Angeles','EighthDay'); }; expect(weatherServiceCall).toThrow(); })); }); ... (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |