错误:超出2000毫秒的超时。如果返回Promise,请确保它已解决。即使用返回

时间:2018-04-27 14:32:56

标签: mongoose mocha chai chai-http

我知道我可以使用异步或回调,但不应该承诺也可以使用吗?

我的研究表明我应该做的就是用return代替done();所以我已经这样做了,我可能有太多的回报。

尽管仍然有2000ms的错误。

我将这些转换为回调(使用done())并且它确实可以正常工作,但我只是想知道我在这里犯了错误的地方。

chai.use(chaiHTTP);

describe('Users', () => {
  let UserId;
  before(() => {
    return mongoose.connect(

      'mongodb://localhost/testpromises',
      {},
      err => {
        if (err) return console.log(err);
        return console.log('TEST DB Connection Success!!');
      }
    );
  });

  after(() => {
    return mongoose.connection.close();
  });

  beforeEach(() => {
    const newUser = new User({
      username: 'testuser',
      password: 'testuser'
    });
    return newUser
      .save()
      .then(savedUser => {
        userId = savedUser._id.toString();
      })
      .catch(err => {
        console.log(err);
      });
  });

  afterEach(() => {
    return User.remove({ username: 'testuser' }, err => {
      if (err) console.log(err);
    });
  });

  describe(`[GET] /admin/users`, () => {
    it('should get the testuser account', () => {
      return chai
        .request(userRoutes)
        .get('/admin/users')
        .then(response => {
          expect(response.status).to.equal(200);
          expect(username).to.equal('testuser');
        })
        .catch(err => {
          throw err;
        });
    });
  });
}); 

1 个答案:

答案 0 :(得分:0)

根据我在阅读您的代码后的理解,问题可能在于您如何在mongoose.connect(...)函数中调用before

mongoose.connect()如果作为第三个参数提供,则返回一个promise或调用一个回调。 (mongoose.callback in the docs)。

您对connect的调用具有回调函数,因此返回的内容可能不是promise,而是undefined

如果这是真的,那么可能你的测试函数在连接之前开始运行,并且等待连接和请求本身的组合花费的时间超过2000毫秒。

您应该将before更改为类似的内容。 afterEach也存在同样的问题。

  before(() => {
    return mongoose.connect('mongodb://localhost/testpromises', {})
      .then(() => {
        console.log('TEST DB Connection Success!!')
      })
      .catch(err => {
        console.log(err);            
      });
    );
  });