Um teste de votos simples se parece com isto (dos documentos de votos):
vows.describe('Division by Zero').addBatch({
'when dividing a number by zero': {
topic: function () { return 42 / 0 },
'we get Infinity': function (topic) {
assert.equal (topic, Infinity);
}
}
}).export(module);
A topic
é a função que é chamada para “retornar” o resultado a ser testado. Mas e se o resultado for calculado por uma chamada assíncrona como essa?
account.find(id).balance(function(balance) {
// Now I have the 'balance', but what to do with this?
});
Bem, o segredo aqui é que a topic
função pode usar um atributo de objeto oculto chamado this.callback
. Este método recebe dois parâmetros: o primeiro é um erro (pode ser nulo em caso de sucesso) e o segundo é o valor a ser testado. Exemplo:
vows.describe('Reading account balance').addBatch({
'when consulting balance of account 1': {
topic: function () {
var c = this.callback;
account.find(1).balance(function(balance) {
c(null, balance);
});
},
// Assuming the balance for account 1 is 100.
'then balance equal 100': function (topic) {
assert.equal (topic, 100);
}
}
}).export(module);