测试方法超标

时间:2019-05-23 12:40:06

标签: javascript node.js

我在测试中拥有此before函数:

before((done) => {
        const cognito = new Cognito();
        return cognito.authUser(
          'john@doe.com',
          'password',
        )
      .then((res) => {
        AuthToken += res.AuthenticationResult.IdToken;
        done();
      })
      .catch((err) => {
        done(err);
      });
  });

它抛出此错误:

Error: Resolution method is overspecified. Specify a callback *or* return a Promise; not both.

我认为这可能已解决:

before((done) => {
        const cognito = new Cognito();
        return new Promise(function(resolve) {
          cognito.authUser(
            'john@doe.com',
            'password',
          )
        })
      .then((res) => {
        AuthToken += res.AuthenticationResult.IdToken;
        done();
      })
      .catch((err) => {
        done(err);
      });
  });

但是它给了我这个错误:

Error: Timeout of 2000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves.

我该如何解决?

2 个答案:

答案 0 :(得分:2)

第一种方法,您可以使用return关键字让跑步者为您处理承诺并等待您的承诺回调。 因此,在这种情况下就不需要done了!

before(() => 
        const cognito = new Cognito();
        return cognito.authUser(
          'john@doe.com',
          'password',
        )
      .then((res) => {
        AuthToken += res.AuthenticationResult.IdToken;
      })
  });

或使用回调方式(带有done)而不使用return关键字:

before((done) => {
        const cognito = new Cognito();
        cognito.authUser(
          'john@doe.com',
          'password',
        )
      .then((res) => {
        AuthToken += res.AuthenticationResult.IdToken;
        done();
      })
  });

如错误所述,您不能同时使用“兑现承诺”和回调方式(使用done => {...})。

选择其中一个:让跑步者自己处理承诺及其回调,或者使用done处理自己!

答案 1 :(得分:2)

该错误可以解释一下。

您不能同时使用回调和返回。

您有2个选择:

  

回调(done参数)

before((done) => {
    const cognito = new Cognito();
    cognito.authUser(
        'john@doe.com',
        'password',
    )
    .then((res) => {
        AuthToken += res.AuthenticationResult.IdToken;
        done();
    })
    .catch((err) => done(err));
});

  

兑现承诺

before(() => {
    const cognito = new Cognito();
    return cognito.authUser(
        'john@doe.com',
        'password',
    )
    .then((res) => {
        AuthToken += res.AuthenticationResult.IdToken;
    })
});