如何分配承诺然后响应外部变量?

时间:2019-09-08 23:37:29

标签: node.js unit-testing promise

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

我尝试在回调中返回promise响应。这是代码:

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

1 个答案:

答案 0 :(得分:1)

更改此:

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

对此:

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

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

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