【问题标题】:Asynchronous function call is not working, synchronous is working异步函数调用不工作,同步工作
【发布时间】:2020-07-13 02:45:58
【问题描述】:

我有一个路由如下的路由器:

router.post('/login', async (req, res, next) => {
  try {
    console.log(req.body);
    const { username, password } = req.body;
    const identity = await userService.getUserInfo(username, password);

    if (!identity.authenticated) {
      return res.json({});
    }

    const requiredTenantId = process.env.TENANT_ID;
    const tenant = identity.tenants.find((it) => it.id === requiredTenantId);

    if (requiredTenantId && !tenant) {
      return res.json({});
    }

    const userResponse = {
      ...identity,
      token: jwt.sign(
        identity,
        envVars.getVar(envVars.variables.AUTH_TOKEN_SECRET),
        { expiresIn: '2h' }
      )
    };

    return res.json(userResponse);
  } catch (err) {
    return next(err);
  }
});

这基本上是一个异步函数。

这是工作测试样本:

const request = require('supertest');
const user = require('../../routes/user');

describe('Test user login path', () => {
  test('If authorized, it should response with authorized JWT token', () => {
    request(user).
      post('api/user/login/').
      send({
        username: 'admin',
        password: 'admin'
      }).
      expect(200);
  });
});

如果我在函数调用之前添加异步并在request用户之前等待:

test('If authorized, it should response with authorized JWT token', async () => {
    await request(user).

测试将失败并出现以下错误:

connect ECONNREFUSED 127.0.0.1:80

有人能解释一下为什么会这样吗?因为在路由器中我使用的是异步路由功能。

【问题讨论】:

    标签: javascript node.js unit-testing testing jestjs


    【解决方案1】:

    那是因为supertest 期望得到一个快速应用程序,而不是一个路由器

    您可以创建一个测试用途的应用程序,挂载用户路由:

    const app = express();
    app.use(bodyParser.json());
    app.use("/api/user", user);
    app.listen(3000);
    

    并将其传递给请求

    await request(app)
      .post("/api/user/login")
    

    working example

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-21
      • 1970-01-01
      相关资源
      最近更新 更多