2017-01-20 6 views
7

Po uaktualnieniu Mocha nie można nawet uruchomić prosty test oto kodDlaczego otrzymuję komunikat "Błąd: metoda rozdzielczości jest zbyt duża"?

const assert = require('assert'); 

it('should complete this test', function (done) { 
    return new Promise(function (resolve) { 
    assert.ok(true); 
    resolve(); 
    }) 
    .then(done); 
}); 

Wziąłem ten kod z here

zrozumiałem, że teraz zgłasza wyjątek Error: Resolution method is overspecified. Specify a callback * or * return a Promise; not both.

Ale jak żeby to zadziałało? Nie zrozumiałem. Mam

node -v 6.9.4 

mocha -v 3.2.0 

Jak uruchomić ten kod są teraz w nowym, poprawnym formacie?

Odpowiedz

6

Wystarczy wrzucić
.then(done); i zastąpić function(done) z function()

wracasz Promise Zatem wywołując zrobione jest zbędny, gdyż powiedział w komunikacie o błędzie

W starszych wersjach trzeba było użyć wywołania zwrotnego w przypadku asynchronicznych metod, takich jak ta, teraz można mieć alternatywę zwrotu balu ise

it ('returns async', function() { 
    return new Promise(function (resolve) { 
    callAsync() 
     .then(function(result) { 
      assert.ok(result); 
      resolve(); 
     }); 
    }); 
}) 

Ale za pomocą obu jest mylące (patrz na przykład tutaj https://github.com/mochajs/mocha/issues/2407)

2

Mocha pozwala użyć wywołania zwrotnego:

it('should complete this test', function (done) { 
    new Promise(function (resolve) { 
    assert.ok(true); 
    resolve(); 
    }) 
    .then(done); 
}); 

LUB powrócić obietnicę:

it('should complete this test', function() { 
    return new Promise(function (resolve) { 
    assert.ok(true); 
    resolve(); 
    }); 
}); 

Nie możesz zrobić obu.