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.
InformationsquelleAutor Halcyon991 | 2014-02-18
Schreibe einen Kommentar