Eu tenho uma função de retorno de chamada before()
que serve para limpar o banco de dados. Está tudo before()
garantido para terminar antes do it()
início?
before(function(){
db.collection('user').remove({}, function(res){}); // is it guaranteed to finish before it()?
});
it('test spec', function(done){
// do the test
});
after(function(){
});
javascript
asynchronous
mocha
Nicolas S.Xu
fonte
fonte
before
manipulador. Exbefore(function () { return db.collection...}
Respostas:
Para novas versões de mocha:
Agora você pode devolver uma promessa ao mocha, e o mocha aguardará a conclusão antes de continuar. Por exemplo, o seguinte teste será aprovado:
Você pode encontrar a documentação aqui
Para versões mais antigas do mocha:
Se você deseja que sua solicitação assíncrona seja concluída antes que tudo o mais aconteça, você precisa usar o
done
parâmetro em sua solicitação anterior e chamá-lo no retorno de chamada.O Mocha irá então esperar até
done
ser chamado para começar a processar os blocos seguintes.No entanto, você deve ter cuidado, pois não criar stub no banco de dados para teste de unidade pode retardar fortemente a execução, pois as solicitações em um banco de dados podem ser muito longas em comparação com a simples execução de código.
Para obter mais informações, consulte a documentação do Mocha .
fonte
done
. Apenas devolva uma promessa.before(function () { return db.collection('user').remove({}); })
já queremove()
retorna uma promessa, não há necessidade de embrulhá-la em umnew Promise()
Esperançosamente, seu db.collection () deve retornar uma promessa. Se sim, você também pode usar a palavra-chave assíncrona em before ()
fonte
after()
? Meuawait
trabalho funciona bem quando eu o chamobefore()
(ele exclui uma entrada do banco de dados), mas se eu colocar exatamente a mesma coisaafter()
, ele não exclui nada no momento em que um segundodescribe()...it()
começa e falha devido aos dados não serem removidos.