Jasmine-Tests mehrere Spione
Schreibe ich ein paar tests für eine Angular Anwendung, dies sind meine ersten Stoß an unit-tests für die Eckige mit Jasmin. Ich habe Probleme bei der Strukturierung der test gerecht zu werden, die für die verschiedenen Szenarien innerhalb der Funktion (nämlich die if-Anweisung und Rückrufe).
Hier ist meine $ - scope-Funktion, die nimmt ein Objekt als argument, und wenn das Objekt verfügt über eine id
, dann aktualisiert er das Objekt (wie es schon existiert), sonst wird es erstellt einen neuen Bericht, und schiebt, um das backend mit der CRUD
service.
$scope.saveReport = function (report) {
if (report.id) {
CRUD.update(report, function (data) {
Notify.success($scope, 'Report updated!');
});
} else {
CRUD.create(report, function (data) {
$scope.report = data;
Notify.success($scope, 'Report successfully created!');
});
}
};
Meinem test so weit geht in eine gefälschte Objekt mit einer id
so werde es auslösen, die CRUD.update
Methode, die ich dann prüfen Sie aufgerufen wird.
describe('$scope.saveReport', function () {
var reports, testReport;
beforeEach(function () {
testReport = {
"id": "123456789",
"name": "test"
};
spyOn(CRUD, 'update');
$scope.saveReport(testReport);
});
it('should call CRUD factory and update', function () {
expect(CRUD.update).toHaveBeenCalledWith(testReport, jasmine.any(Function));
});
});
Verstehe ich Jasmin nicht erlaubt, mehrere Spione, aber ich möchte in der Lage sein irgendwie testen für die if-Bedingung, und führen Sie einen mock test, wenn das Objekt nicht übergeben Sie ein Objekt zu:
describe('$scope.saveReport', function () {
var reports, testReport;
beforeEach(function () {
testReport = {
"id": "123456789",
"name": "test"
};
testReportNoId = {
"name": "test"
};
spyOn(CRUD, 'update');
spyOn(CRUD, 'create'); //TEST FOR CREATE (NoId)
spyOn(Notify, 'success');
$scope.saveReport(testReport);
$scope.saveReport(testReportNoId); //TEST FOR NO ID
});
it('should call CRUD factory and update', function () {
expect(CRUD.update).toHaveBeenCalledWith(testReport, jasmine.any(Function));
//UNSURE ON THIS PART TOO
});
});
Ich gelesen habe, Dinge, die über die Verwendung der .andCallFake()
Methode, aber ich konnte nicht sehen, wie dies funktionieren könnte mit meinem setup. Jede Hilfe wirklich dankbar.
- Haben Sie versucht, die alternative syntax
jasmine.createSpy()
? - Jasmin 2 Hinzugefügt wurde die Möglichkeit zum zurücksetzen der Spione während des tests, könnte, dass geben, was Sie brauchen? In der vorherigen version, die ich gerade erstellt separate tests für die anderen Fälle.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es scheint, dass Sie sollten entscheiden, was Sie brauchen, um zuerst testen. Wenn Sie testen wollen, einfach das update wird aufgerufen, wenn id vorhanden ist, oder erstellen wird aufgerufen, wenn es nicht, dann sollten Sie nur die Struktur der it-Funktion mit diesen Bedingungen. Die vor jeder ist der falsche Ort für einige dieser Dinge.
Nur über die Dinge die vor jedem, den Sie eigentlich tun sollten, vor jedem test.
Hoffe, dass dies geholfen!