J'ai un service angulaire appelé 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
};
});
J'essaye de tester ce service unitaire en utilisant 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();
});
});
J'ai lu sur le support asynchrone dans Jasmine, mais comme je suis plutôt nouveau dans les tests unitaires avec javascript, cela n'a pas pu le faire fonctionner.
Je reçois une erreur:
Async callback was not invoked within timeout specified by jasmine.DEFAULT_TIMEOUT_INTERVAL
et mon test prend trop de temps à exécuter (environ 5 s).
Quelqu'un peut-il m'aider à fournir un exemple fonctionnel de mon code avec quelques explications?
Jest
prévu - très courant lors du débogage et en prenant un certain temps pour inspecter les variables.
afterEach
étape qui effaçait la base de données (en utilisant la deleteMany
méthode). L'ajout jest.setTimeout(30000);
de la beforeAll
méthode semble avoir résolu cela pour moi - je suppose que puisque la suppression de la base de données est un appel réseau (dans la condition), cela prenait parfois plus de 3 secondes et le jetait.