为了账号安全,请及时绑定邮箱和手机立即绑定

HttpTestingController通过HttpParams测试正确的

HttpTestingController通过HttpParams测试正确的

catspeake 2021-04-27 09:56:48
我正在寻找使用HttpTestingController来测试我的服务通过HttpClient发送的POST请求中是否包含正确的字段集。网络表格export class WebFormService {constructor(private httpClient: HttpClient) { }public submitForm(fields): Observable<any> {  const headers = new HttpHeaders()      .set('Content-Type', 'application/x-www-form-urlencoded');  const body = new HttpParams()    .set('_to',  environment.FORM_RECIPIENT)    .set('source', 'mysite');  for (let key of fields) {      body.set(key, fields[key]);  }  return this.httpClient.post(    environment.FORM_URL,    body,    {headers}  );}web-form.spec.tsit('sends a POST request via the HttpClient service', () => {    const testFields = {      name: 'test contributor',      message: 'my message',      email: 'test@tester.com'    };    webFormService.submitForm(testFields).subscribe();    const req = httpTestingController.expectOne(environment.FORM_URL);    expect(req.request.method).toEqual('POST');    expect(req.request.headers.get('Content-Type')).toEqual('application/x-www-form-urlencoded');    // Here I'd like to make assertions about the fields that data being posted.    req.flush('');});HttpRequest是url编码的body,所以req.request.body是正确的url编码的字符串。有什么好的选择可以进行测试而无需对请求主体进行解码和比较对象?
查看完整描述

1 回答

?
慕容森

TA贡献1853条经验 获得超18个赞

实际上,该HttpParams对象仍然可以通过HttpRequestbody属性使用。


这有点令人困惑且难以发现,因为HttpParams.toString()函数执行urlencoding,这反过来又导致测试运行程序发出已编码的字符串。


因此,仍然可以利用HttpParams函数来获取被测服务提供给的键和值HttpClient。


例如...


const req = httpTestingController.expectOne(environment.CONTRIBUTION_FORM_ENDPOINT);

expect(req.request.method).toEqual('POST');

expect(req.request.headers.get('Content-Type')).toEqual('application/x-www-form-urlencoded');


const expectedFormKeys = Object.keys(testFields).concat(['_to', 'source']);

expect(req.request.body.keys().sort()).toEqual(expectedFormKeys.sort());

// ... and so on


查看完整回答
反对 回复 2021-05-06
  • 1 回答
  • 0 关注
  • 234 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信