Ошибка: превышено время ожидания 2000 мс. если вы возвращаете обещание, убедитесь, что оно разрешено. По-прежнему не работает даже при замене done () на return - PullRequest
0 голосов
/ 27 апреля 2018

Я знаю, что могу использовать асинхронные или обратные вызовы, но обещания тоже не должны работать?

Мое исследование показало, что все, что мне нужно, это использовать return вместо done (); Так что я сделал это до такой степени, что у меня, вероятно, слишком много возвратов.

Все еще получаю ошибку 2000 мс.

Я преобразовал их в обратные вызовы (с 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 голосов
/ 30 апреля 2018

Насколько я понимаю после прочтения вашего кода, проблема, вероятно, связана с тем, как вы вызываете mongoose.connect(...) в функции before.

mongoose.connect() либо возвращает обещание, либо вызывает обратный вызов, если он указан в качестве третьего параметра. ( mongoose.callback в документах ).

Ваш вызов 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);            
      });
    );
  });
...