2017-10-10 5 views
0

En regardant d'autres questions, vous ne pouvez pas vraiment trouver la cause du problème. J'essaie de tester en utilisant du moka.Assurez-vous que callback done() est appelé dans ce test moka

it("Should not do the work",function(done) { 
    axios 
    .post("x/y",{ id:a2 }) 
    .then(function(res) { 
     assert(false,"Should not do the work"); 
     done(); 
    }) 
    .catch(function(res) { 
     assert.equal(HttpStatus.CONFLICT,res.status); 
     done(); 
    }); 
}); 

it("Should do the work",function(done) { 
    axios 
    .post("/x/y",{ id: a1 }) 
    .then(function(res) { 
     done(); 
    }) 
    .catch(done); 
}); 

Le résultat a été:

√ Should not do the work (64ms) 
1) Should do the work 
1 passing (20s) 
1 failing 

1) Error: Timeout of 20000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves. 

L'augmentation du délai d'attente ne fonctionne pas.

+0

N'oubliez pas que vous pouvez simplement 'renvoyer 'une promesse dans Mocha et il va s'en occuper en conséquence. Dans votre premier exemple, êtes-vous sûr que ces blocs sont réellement exécutés? Je vérifierais que ça se déclenche du tout. – tadman

Répondre

0

Ne pas oublier que vous pouvez simplement return une promesse en Moka et il traitera en conséquence. Dans votre premier exemple, êtes-vous sûr que ces blocs sont réellement exécutés? Faire une assertion peut provoquer une exception, ce qui peut saboter ce que vous essayez de faire. Si votre bibliothèque de promesses le prend en charge, vous pouvez toujours:

it("Should not do the work",function(done) { 
axios.post("x/y",{ id:a2 }) 
    .then(function(res) { 
    assert(false,"Should not do the work"); 
    }) 
    .catch(function(res) { 
    assert.equal(HttpStatus.CONFLICT,res.status); 
    }) 
    .finally(done); 
}); 

S'assurer que cela soit toujours fait.

Mieux encore:

it("Should not do the work",function() { 
    return axios.post("x/y",{ id:a2 }) 
    .then(function(res) { 
     assert(false,"Should not do the work"); 
    }) 
    .catch(function(res) { 
     assert.equal(HttpStatus.CONFLICT,res.status); 
    }) 
}); 

montre pour faire des prises sur des affirmations et assertions des prises. Un meilleur plan pourrait être asynchrone:

it("Should not do the work", async function() { 
    var res = await axios.post("x/y",{ id:a2 }) 

    assert.equal(HttpStatus.CONFLICT,res.status); 
}); 
+0

Le premier exemple fonctionne correctement. Je suis confronté au problème avec le deuxième exemple –

+0

Peut-être votre mise en œuvre est éclatée parce que cela devrait fonctionner. – tadman