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

标签 javascript unit-testing session mocha.js chai

我正在 Mocha 和 Chai 中编写单元测试,我正在尝试弄清楚如何测试使用 fetch API 发送请求的函数,该函数需要要访问的 session 。该函数是一个 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 是需要 session 授权才能访问的页面。有没有简单的方法可以做到这一点,或者我应该寻求“发明轮子”?

最佳答案

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

仅测试您感兴趣的部分的正确方法是模拟 fetch 函数,并使用模拟来验证它是否以您期望的方式调用,并且还从您的单元的模拟,可用于完成测试。您可以执行其他检查,以确保您的单位已按您预期的方式处理返回。

看来至少有一个 npm package available用于模拟fetch

关于javascript - 如何测试在浏览器中发送需要身份验证的请求的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33020459/

相关文章:

javascript - 如何获取 <td> 内的跨度值(表数据),当单击也在 <td> 内的按钮时

javascript - 样式为 :before and :after CSS 的互斥复选框

javascript - 如何在 Postman 中断言空值?

session - 共置缓存上的 Azure session

javascript - 翻译从原型(prototype) de jquery 插入新元素

python - 如何在 python 2.6 中跳过单元测试用例

database - 带有 DBUnit 扩展的 PHPUnit 数据库测试

php - session 安全?

java - Tomcat:Java 静态变量作用域、应用程序或 session 范围?

unit-testing - clojure.test 应该在一定范围内断言两个不同的 float 相等