AngularJS教程说,当使用$ httpBackend时,应该嘲笑响应。我不确定的是,当我可以使用$ http并发出请求并检索“真实”数据时,为什么我要模拟对API的请求?然后我可以对实际响应运行测试,这允许检查来自API的数据响应是否已经改变(出于何种原因)。但是,如果我在模拟响应并且API数据发生了变化,那么我的模拟响应将与实际响应不同。因此,使测试不正确。
答案 0 :(得分:2)
你做对了。有(至少)三种类型的测试:
- 单元测试
- 集成测试
- 系统测试
醇>
你可以找到一个很好的解释here。
每个人都定义了不同的测试。我的观点是:
- 单元测试分别测试模块/每个功能。
- 集成测试正在测试整个工作流程(“填写注册表单>向后端发送数据>接收令牌> 登录“)
- 系统测试 - 对我来说 - 是:前端的用例。示例:用户可以登录并在输入凭据后显示用户配置文件。
醇>
您所描述的是单元测试。因此,测试您的函数是否正在执行API调用就足够了。还要测试您是否呼叫某个URL并发送正确的数据。
请记住:您经常会在代码中的每次更改时运行测试。 因此,总是调用真正的API会非常多。
在单元测试期间,我们希望我们的单元测试能够快速运行而且没有 外部依赖项,因此我们不希望发送XHR或JSONP请求 到真正的服务器。我们真正需要的是验证是否确定 请求已发送或未发送,或者只是让 应用程序提出请求,使用预先训练的响应进行响应 断言最终结果是我们所期望的。
您可以使用$httpBackend.expect进行测试。
那么,如果您的API端点正在改变数据结构呢?
最后,没有防弹概念。但这些步骤和心态已经成为一个相当大的项目的一个很好的证据。
答案 1 :(得分:0)
Jasmine 是单元测试框架。
如果您直接使用$http
,则不会测试唯一的组件,您将同时测试您的API。如果您的API关闭,您的测试将失败。
单独测试您的组件更清晰。
更多:
$httpbackend
允许您尝试API未提供的测试用例。因此,您可以构建强大的应用程序。
$http
可能需要一段时间才能解决,$httpbackend
可以通过询问来解决所有请求:
httpBackend.flush();
等