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

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

我正在用 Mocha 和 Chai 编写单元测试,我正在尝试找出如何测试使用 fetch API 发送需要会话才能访问的请求。此函数是 returns 一个 thenable 对象的 ES6 方法。

_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是需要session授权才能访问的页面。有什么简单的方法可以做到这一点,还是我应该寻求 "invent the wheel"?

通过单元测试,我们的想法是测试您感兴趣的单元,而且仅此而已。在这种情况下,该单元使用 fetch,它本身会关闭并与网站对话,因此实际上您的单元测试最终会往返于一个网站,因此您最终会 "testing" 那个也是。不是你想要的单元测试。

只测试您感兴趣的部分的正确方法是模拟 fetch 函数,并使用模拟来验证它是否以您期望的方式被调用,此外 return 从模拟到你的单元的数据,它可以用来完成测试。您可以执行其他检查以确保您的设备已按照您预期的方式处理 return。

似乎至少有一个 npm package available 用于模拟 fetch