Jor*_*ola 5 testing unit-testing angularjs karma-runner
如今,特别是在angularjs测试领域,有很多指南用于进行不同类型的测试,如单元测试,中途测试和端到端测试,在这里您可以学习如何对控制器,工厂等进行不同的测试.
主题是,什么应该是可测试的?我可以测试我的模块应用程序有控制器,指令,成功登录,检查后端调用等.但我应该测试什么?,因为你可以测试所有的东西,可能它不是一个很好的做法"轻松测试".
有人可以给我任何建议吗?谢谢.
对于一般答案,您可能会看一下这个问题.
假设您对角度的单元测试是用Jasmine或类似的东西编写的,请注意Jasmine适用于"行为驱动开发".
从这个演示文稿:"行为驱动 - 开发是关于通过从其利益相关者的角度描述其行为来实现应用程序"
另一个好的来源,但更严格(面向TDD或测试驱动开发)是Bob Martin的清洁代码.我最大的测试要点:
也就是说,
作为一个粗略的例子,假设您需要一个应用程序来轮询给定城市的天气预报数据.您的用户或客户代码的要求可能类似于"给定一组天气数据,当我输入城市名称时,我应该获得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);
}));
});
...
Run Code Online (Sandbox Code Playgroud)
然后假设您有另一个要求,即天气数据说出有关湿度的信息,例如"给定一组天气数据,当我输入城市名称时,我应该获得湿度数据"
...
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);
}));
});
...
Run Code Online (Sandbox Code Playgroud)
在这里,我们并不真正关心结果的结构,只是它在某种程度上给出了星期一湿度的概念.我们并不关心weatherService的内部(例如,它是否从数据库,静态文件或其他Web服务获取数据).你可能会有这样的东西,但仍然表达了要求:
...
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','Monday');
expect(result.humidity).not.toBe(null);
}));
});
...
Run Code Online (Sandbox Code Playgroud)
这里很酷的事情是你可以"通过一厢情愿的思考" - 你创建靠近你的用户和用例的功能签名,然后填写它们,只获得你需要的东西.现在,如果您的第一个要求改变为"给定一组天气数据,当我输入城市名称时,我应该获得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();
}));
});
...
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
662 次 |
最近记录: |