模拟Firebase管理员身份验证单元测试经过身份验证的路由

时间:2017-09-04 07:11:59

标签: unit-testing express firebase supertest firebase-admin

我正在使用firebase-admin在我的快速后端进行身份验证。我有一个中间件来检查请求是否经过身份验证。

public resolve(): (req, res, next) => void {
  return async (req, res, next) => {
    const header = req.header('Authorization');
    if (!header || !header.split(' ')) {
      throw new HttpException('Unauthorized', UNAUTHORIZED);
    }
    const token = header.split(' ')[1];
    await admin.auth().verifyIdToken(token).then((decodedToken: any) => {
      req.user = decodedToken;
      next();
    }).catch((error: any) => {
      throw new HttpException(error, UNAUTHORIZED);
    });
  };
}

到目前为止,我只能对我的路线进行单元测试,以确保他们回复UNAUTHORIZED而不是NOT_FOUND

it('GET /api/menu should return 401 ', done => {
  const NOT_FOUND = 404;
  const UNAUTHORIZED = 401;
  supertest(instance)
    .get('/api/menu')
    .end((error, response: superagent.Response) => {
      expect(response.status).not.toEqual(NOT_FOUND);
      expect(response.status).toEqual(UNAUTHORIZED);
      done();
    });
});

但是,我想写更多的单元测试!我想模仿用户,所以我可以提出AUTHORIZED个请求!我想使用我对用户的type属性来验证某个type的用户是否可以/不能使用某些路由。有没有人知道如何用firebase-admin-node做到这一点?

看起来firebase-admin-node repo会为单元测试here生成令牌,但我不确定如何将其应用于我的具体问题。

0 个答案:

没有答案