如何测试在浏览器中发送请求的函数,该请求需要身份验证

How do I test a function that sends a request in browser that requires authentication?

本文关键字:请求 函数 身份验证 何测试 测试 浏览器      更新时间:2023-09-26

我正在Mocha和Chai中编写单元测试的过程中,我试图找出如何测试使用fetch API发送需要会话访问的请求的功能。这个函数是一个ES6方法,返回一个thenable对象。

_auth(record) {
    var authMetadata = this._getAuthMetadata(record);
    var authUrl = `/${this._getPortal(window.location.pathname)}/tlist_child_auth.html?${this._encodeUri(authMetadata)}`;
    if (getPortal() !== 'guardian') {
      authUrl += `&frn=${this.coreTableNumber}${this.foreignKey}`;
    }
    return fetch(authUrl, {
      credentials: 'include'
    }).then(function(rawData) {
      return rawData.text();
    });
  }

tlist_child_auth.html是需要会话授权才能访问的页面。有什么简单的方法可以做到这一点,或者我应该寻求"发明轮子"吗?

使用单元测试,其思想是测试您感兴趣的单元,并且只测试单元。在本例中,单元使用fetch,它自己启动并与网站对话,因此实际上您的单元测试最终会对网站进行往返,因此您最终也会"测试"。这不是你想要的单元测试。

只测试您感兴趣的部分的正确方法是模拟fetch函数,并使用模拟来验证它是以您期望的方式调用的,另外还要从模拟返回数据到您的单元,它可以使用这些数据来完成测试。您可以执行其他检查,以确保您的单位已按您期望的方式处理退货。

似乎至少有一个npm包可用于mock fetch