<分区>
如今,特别是在 angularjs 测试领域,有很多针对不同类型测试的指南,例如单元测试、中途测试和 E2E 测试,您可以在其中学习如何对 Controller 、工厂进行这些不同的测试等
主题是,什么应该是可测试的?我可以测试我的模块应用程序是否具有 Controller 、指令、成功登录、检查对后端的调用等。但是我应该测试什么?,因为你可以测试所有的东西,这可能不是进行“简单测试”的好习惯。
有人可以给我任何建议吗?谢谢。
<分区>
如今,特别是在 angularjs 测试领域,有很多针对不同类型测试的指南,例如单元测试、中途测试和 E2E 测试,您可以在其中学习如何对 Controller 、工厂进行这些不同的测试等
主题是,什么应该是可测试的?我可以测试我的模块应用程序是否具有 Controller 、指令、成功登录、检查对后端的调用等。但是我应该测试什么?,因为你可以测试所有的东西,这可能不是进行“简单测试”的好习惯。
有人可以给我任何建议吗?谢谢。
最佳答案
要获得一般答案,您可以查看此 question .
假设您的 Angular 单元测试是用 Jasmine 或类似的东西编写的,请注意 Jasmine 面向“行为驱动开发”。
来自 this presentation : “行为驱动开发是通过从利益相关者的 Angular 描述其行为来实现应用程序”
Bob Martin 的 Clean Code 是另一个很好的来源,但更严格(面向 TDD 或测试驱动开发)。我最大的测试收获:
也就是说,
作为一个粗略的例子,假设您需要一个应用程序来轮询给定城市的天气预报数据。您的用户或客户代码的要求可以表述为“给定一组天气数据,当我输入城市名称时,我应该获得 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', 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);
}));
});
...
这里很酷的一点是,您可以“一厢情愿地编写代码”——您可以创建接近用户和用例的函数签名,然后填写它们,只获得您需要的东西。现在,如果您的第一个要求更改为“给定一组天气数据,当我输入一个城市名称时,我应该获得 4 天的预报数据”,您必须更改测试而不是搜索评论,您只需要更改与该需求更改相关的代码。
您的某些行为可能不会被您的用户明确说明。例如,对于上面的示例,最终用户比 Web 服务消费者客户端更不可能说:“给定一组天气数据,当我输入城市名称和虚构的一天时,我应该得到一个异常(exception)"你必须自己收集那个和测试用例:
...
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();
}));
});
...
关于angularjs - 我应该在 AngularJS 中测试什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21934698/
相关文章:
java - 谷歌指南 : Mock a @provides method consists of set of object
javascript - 柏树调用 ('removeAttr' , 'target' ) 不工作
testing - Google reCAPTCHA V2 - 触发更难的测试版本?
html - 如何使用 angularJS 显示模态弹出窗口?
angularjs - Angular,如何有条件地设置必填字段的样式?
angularjs - 使用 $timeout 时的 Promise 链接
performance - 如何对不同编程语言编写的库进行性能测试?
java - Mockito - @Spy vs @Mock
python - 艰难地学习 Python,Ex 49 : Comparing objects using assert_equal