0

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

我的研究表明,我需要做的就是使用 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;
        });
    });
  });
}); 
4

1 回答 1

0

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

mongoose.connect()如果作为第三个参数提供,则返回一个承诺或调用回调。(文档中的 mongoose.callback)。

您的调用connect有一个回调函数,所以返回的可能不是 a promisebut undefined

如果这是真的,那么您的测试功能可能在连接之前开始运行,并且等待连接和请求本身的组合需要超过 2000 毫秒。

您可能应该更改before为这样的内容。afterEach有同样的问题。

  before(() => {
    return mongoose.connect('mongodb://localhost/testpromises', {})
      .then(() => {
        console.log('TEST DB Connection Success!!')
      })
      .catch(err => {
        console.log(err);            
      });
    );
  });
于 2018-04-30T06:45:23.813 回答