Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
$httpBackend与AngularJS/Jasmine-为什么要模拟响应?_Angularjs_Unit Testing_Jasmine - Fatal编程技术网

$httpBackend与AngularJS/Jasmine-为什么要模拟响应?

$httpBackend与AngularJS/Jasmine-为什么要模拟响应?,angularjs,unit-testing,jasmine,Angularjs,Unit Testing,Jasmine,AngularJS教程说,当使用$httpBackend时,应该模拟响应。我不确定的是,当我可以使用$http发出请求并检索“真实”数据时,为什么我要模拟对API的请求?然后,我可以在实际响应上运行测试,这允许检查来自API的数据响应是否已更改(无论出于什么原因)。但是,如果我模拟响应并且API数据发生更改,那么我的模拟响应将与实际响应不同。因此,使测试不正确。Jasmine是一个单元测试框架 如果直接使用$http,则不会测试唯一的组件,而是同时测试API。如果API关闭,测试将失败 单独测试

AngularJS教程说,当使用$httpBackend时,应该模拟响应。我不确定的是,当我可以使用$http发出请求并检索“真实”数据时,为什么我要模拟对API的请求?然后,我可以在实际响应上运行测试,这允许检查来自API的数据响应是否已更改(无论出于什么原因)。但是,如果我模拟响应并且API数据发生更改,那么我的模拟响应将与实际响应不同。因此,使测试不正确。

Jasmine是一个单元测试框架

如果直接使用
$http
,则不会测试唯一的组件,而是同时测试API。如果API关闭,测试将失败

单独测试组件会更干净

更多信息:

  • $httpbackend
    允许您尝试API不提供的测试用例。因此,您可以构建健壮的应用程序

  • $http
    可能需要时间才能解决,而
    $httpbackend
    只需询问以下问题即可解决所有请求:

    httpBackend.flush();
    

等等。

你说得对。有(至少)三种类型的测试:

  • 单元测试
  • 集成测试
  • 系统测试
  • 你可以找到一个很好的解释

    每个人对这些测试的定义都不同。我的观点是:

  • 单元测试分别测试一个模块/每个功能
  • 集成测试正在测试整个工作流(“填写注册表>向后端发送数据>接收令牌> 登录名“)
  • 系统测试-for me-is:前端用例。示例:用户可以登录并在输入其凭据后显示用户配置文件
  • 您所描述的是单元测试。因此,测试函数是否正在执行API调用就足够了。还要测试是否调用某个URL并发送正确的数据

    请记住:您经常在每次代码更改时运行测试。 因此,总是调用真正的API太过分了。

    在单元测试期间,我们希望我们的单元测试能够快速运行,并且没有任何错误 外部依赖关系,因此我们不希望发送XHR或JSONP请求 到一个真正的服务器。我们真正需要的是验证某个 请求是否已发送,或者让 应用程序提出请求,通过预先培训的响应和 断言最终结果是我们期望的结果

    你可以用这个测试

    那么,如果您的API端点正在更改数据的结构呢?

  • 确保您正在测试后端,并确保按照定义发送数据
  • 编写一个集成测试,在该测试中检查通过特定流程(登录、接收仪表板数据等)的数据流
  • 最后,没有防弹的概念。但这些步骤和心态已经是一个相当大的项目的很好证明