【问题标题】:How to assign promise then response to external variable?如何分配承诺然后响应外部变量?
【发布时间】:2020-01-10 18:39:13
【问题描述】:

我正在尝试重用返回身份验证令牌的代码来测试我的受保护端点。

我尝试在回调中返回承诺响应。代码如下:

common.js

const authToken = accessToken => {
conn
.connect()
.then(() => {
  request(app)
    .post("/register")
    .send({ username: "newUser", password: "newPass" })
    .then(res => {
      request(app)
        .post("/login")
        .send({ username: "newUser", password: "newPass" })
        .then(res => {
          token = res.body.token;
          accessToken(token);
        })
        .catch(err => done(err));
    })
    .catch(err => done(err));
})
.catch(err => done(err));
};

module.exports = { authToken };

auth.test.js

const authToken = require("../common").authToken();

let token;
before(done => {
  authToken(token => {
   token = token;
   done();
  });
})

但我不断收到此错误:

TypeError: authToken is not a function

【问题讨论】:

  • 导入 authToken 的代码在哪里?
  • 嗨,我已经添加了导入。

标签: node.js unit-testing promise


【解决方案1】:

改变这个:

const authToken = require("../common").authToken();

到这里:

const authToken = require("../common").authToken;

您的原始代码加载模块 common.js,从中获取导出对象,从导出中获取 .authToken 属性,然后在导出对象中调用该函数引用并将执行该函数的返回值分配给authToken 变量。由于该函数不返回任何内容,authToken 将是 undefined 并且肯定不是函数,因此当您尝试像函数一样使用它时会导致错误。

相反,您只想导入函数引用本身并将函数引用分配给您的authToken 变量。仅导入函数引用将允许您稍后以 auth.test.js 中的方式调用它。

【讨论】:

    猜你喜欢
    • 2014-07-07
    • 1970-01-01
    • 2022-11-16
    • 2018-12-23
    • 2015-09-24
    • 2018-08-30
    • 2020-04-30
    • 1970-01-01
    • 2018-02-26
    相关资源
    最近更新 更多