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

时间:2015-10-08 15:49:52

标签: javascript unit-testing session mocha chai

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

1 个答案:

答案 0 :(得分:2)

通过单元测试,我们的想法是测试您感兴趣的单元,并且只测试它。在这种情况下,该单元使用fetch,它本身就会离开并与网站进行对话,因此实际上您的单元测试最终会进行一次网站往返,因此您最终会进行测试&#34 ; 也是。不是你想要的单元测试。

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

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