1

私はMochaと協力しており、構築中のAPIをテストしようとしています。

関数を配置する場所がわかりませんdone()

現在の場所に配置すると、のコールバック関数は実行されませんUser.findOne()

のコールバック関数の下部にdoneを配置するとUser.findOne()、タイムアウトが発生します。

私は非同期とこの完了した関数に比較的慣れていないので、誰かがこれらの2つのケースが発生する理由と、Mochaで正しくテストされるようにコードを修正する方法を説明できますか?

describe('POST /signup', function() {
  before(checkServerIsRunning); // Need to implement
  it('create a new user if username is unique', function(done) {
    httpReq({
      method : 'POST',
      url    : url + '/signup',
      json   : true,
      body   : JSON.stringify({ 
        username : 'test',
        first    : 'first',
        last     : 'last' })
      },
      function (err, res, body) {
        if (err) {
          done(err);
        }
        else {
          res.statusCode.should.be.equal(201);
          User.findOne( { username: 'test' }, function(err, user) {
            user.should.have.property('username', 'testy');
            user.should.have.property('firstName', 'first');
            user.should.have.property('lastName', 'last');
            usersToRemove.push(user);
          });
          done();
        }
      }
    );
  });
});
4

1 に答える 1

1

done()に呼び出された内部に配置する必要がありfindOneます。

タイムアウトした場合findOneは、コールバックを呼び出さないか(エラーです!)、実行に時間がかかりすぎます。

この場合this.timeout(5000)、テストの開始時のようなものを貼り付けることでタイムアウトを増やすことができます(これによりタイムアウトが5秒に増加します)。

一般的に、通常はそれほど遅いテストは必要ないので、なぜこれほど時間がかかるのかを考えてみてください。

于 2012-08-07T13:09:52.277 に答える