加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

我应该在AngularJS中测试什么?

发布时间:2020-12-17 17:45:24 所属栏目:安全 来源:网络整理
导读:如今,特别是在 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();
          }));
      });
      ...

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读