Ho un servizio angolare chiamato requestNotificationChannel
:
app.factory("requestNotificationChannel", function($rootScope) {
var _DELETE_MESSAGE_ = "_DELETE_MESSAGE_";
function deleteMessage(id, index) {
$rootScope.$broadcast(_DELETE_MESSAGE_, { id: id, index: index });
};
return {
deleteMessage: deleteMessage
};
});
Sto cercando di testare l'unità di questo servizio usando jasmine:
"use strict";
describe("Request Notification Channel", function() {
var requestNotificationChannel, rootScope, scope;
beforeEach(function(_requestNotificationChannel_) {
module("messageAppModule");
inject(function($injector, _requestNotificationChannel_) {
rootScope = $injector.get("$rootScope");
scope = rootScope.$new();
requestNotificationChannel = _requestNotificationChannel_;
})
spyOn(rootScope, '$broadcast');
});
it("should broadcast delete message notification", function(done) {
requestNotificationChannel.deleteMessage(1, 4);
expect(rootScope.$broadcast).toHaveBeenCalledWith("_DELETE_MESSAGE_", { id: 1, index: 4 });
done();
});
});
Ho letto del supporto asincrono in Jasmine, ma dato che sono piuttosto nuovo ai test unitari con javascript non sono riuscito a farlo funzionare.
Ricevo un errore:
Async callback was not invoked within timeout specified by jasmine.DEFAULT_TIMEOUT_INTERVAL
e il mio test sta impiegando troppo tempo per essere eseguito (circa 5 secondi).
Qualcuno può aiutarmi a fornire un esempio funzionante del mio codice con qualche spiegazione?
Jest
previsto , molto comune durante il debug e il tempo impiegato per ispezionare le variabili.
afterEach
passo che stava cancellando il database (usando il deleteMany
metodo). L'aggiunta jest.setTimeout(30000);
del beforeAll
metodo sembra aver risolto questo problema per me - suppongo che l'eliminazione del database sia una chiamata di rete (all'interno della condizione), a volte impiegava più di 3 secondi e il lancio.