Angular 5(Karma / Jasmine测试) - 使用模拟后端来模拟错误消息的错误响应

问题描述 投票:0回答:2

我不太明白MockBackend功能如何作为described over here。我是Angular的新手。

我想编写一些测试用例以确保在后端发生服务器错误时,我已经在前端显示错误消息。这需要具有故意返回错误的HTTP请求。我遇到了jasmine-ajax和nock包的问题,​​但有人告诉我关于编写实例的问题

即使您已经实现了实际的后端,您是否仍然可以创建一个模拟后端来测试表单消息的外观,这些消息在显示之前首先需要HTTP请求?

一个示例是当要求用户填写销售表单时,并且在发送时,服务器遇到错误并发回500内部服务器错误响应,然后前端显示服务器错误消息。

我不太了解Angular中的模拟后端。我担心的是,通过使用模拟后端,它将导致我在组件的控制器中发出的所有请求以及在测试用例中发出的请求被发送到模拟后端而不是实际的后端,从而在我的测试套件中引入假阳性失败。

如果我将我的测试套件编程为使用'@ angular / http / testing'中的MockBackend类,这是否会导致我对所有Angular组件的HTTP请求被发送到该模拟后端服务器而不是实际的服务器?

编辑:这是一个case of what I'm referring to。通过使用MockBackend,将不会发送一些需要向实际服务器发送HTTP请求的测试。

angular unit-testing mocking backend http-error
2个回答
0
投票

如果我错了,请纠正我,根据你的描述来判断我假设你正在使用http模块。您可以考虑升级到httpClient模块,针对服务器错误的测试非常简单:https://angular.io/guide/http#testing-for-errors

顺便说一句,单元测试应该是自包含的。您应该模拟所有依赖项(可能是测试模块的提供程序),而不是向实际服务器发送任何请求。信息和状态代码都可以使用http testing module进行模拟。


0
投票

我认为嘲笑httpclient是代码气味。我更喜欢创建自己的api类来包装http或httpClient。然后在单元测试中,您可以使用jasmin间谍返回测试所需的数据。

看到这个例子https://angular.io/guide/http

import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';

@Injectable()
export class ConfigService {
  constructor(private http: HttpClient) { }
}

configUrl = 'assets/config.json';

getConfig() {
  return this.http.get(this.configUrl);
}

然后在你的测试中(伪代码,不记得语法):

spyOn(configService, 'getConfig').and.returnValues({data:123});
© www.soinside.com 2019 - 2024. All rights reserved.