Тестирование жасмина .not.toHaveBeenCalled (); - PullRequest
0 голосов
/ 31 января 2019

Я делаю юнит-тестирование с Жасмин и Стамбулом.Я проверяю форму отправки.И у меня уже есть несколько модульных тестов для этого.Но теперь я хочу, чтобы:

this.allowSubmitAgain = false; this method:

this.diplomaService.saveDiplomaMetaData(false, this.resources.opslaanSpinnerTekst).pipe(map(() => {

не было выполнено.Потому что в этой строке в instanbul:

if (this.allowSubmitAgain) {

написано E: иначе путь не выбран.

Это весь метод:

diplomaDataSubmitted() {
        if (this.formModel && this.formModel.form.valid) {

            this.formService.formStoreService.hideValidationSummary(this.formName);
            Eif (this.allowSubmitAgain) {
                this.allowSubmitAgain = false;
                this.diplomaService.saveDiplomaMetaData(false, this.resources.opslaanSpinnerTekst).pipe(map(() => {
                    const documents: DocumentModel[] = this.formModel.getAngularFormControl(DiplomaFormKeysModel.keys.diplomasUpload).value.files;

                    this.diplomaService.saveDocumentForDiploma(documents, () => {
                        this.router.navigateByUrl(RoutesRegisterModel.pathnameMyRegisterRouteDiplomas).then(() => {
                            this.feedbackService.addSuccessMessageOnMainPortal(
                                {
                                    key: this.resourceKeys.succesvolWijziging,
                                    value: this.resources.succesvolWijziging,
                                }
                            );
                        });
                    }, (error: any) => {
                        this.allowSubmitAgain = true;
                        observableThrowError(error);
                    }, this.resources, this.resourceKeys);
                })).subscribe(() => { }, (error: any) => {
                    this.allowSubmitAgain = true;
                    observableThrowError(error);
                });
            }
        } else {
            this.formService.formStoreService.showValidationSummary(this.formName);

        }
    }

И это моймодульный тест:

it('should not allow submit beaucse form has errors', fakeAsync(() => {

        // Arrange
        const spySaveMetaDataDiploma = spyOn(diplomaServiceMock, 'saveDiplomaMetaData');

        diplomaServiceMock.returnErrorResponse();
        // Act
        component.diplomaDataSubmitted();
        fixture.detectChanges();

        // Assert
         expect(spySaveMetaDataDiploma).not.toHaveBeenCalled();
        console.log('testcase');
        expect(component.allowSubmitAgain).toBe(false);


    }));

Но я получаю эту ошибку:

TypeError: Cannot read property 'subscribe' of undefined.

Так как это исправить?

Спасибо

У меня естьтеперь вот так:

it('should not allow submit beaucse form has errors', fakeAsync(() => {

        // Arrange

        const spySaveDiploma = spyOn(diplomaServiceMock, 'saveDiplomaMetaData').and.callThrough();

        // Act
        component.allowSubmitAgain = false;

        // Assert

        console.log('testcase');
        expect(component.allowSubmitAgain).toBe(false);
        expect(spySaveDiploma).not.toHaveBeenCalled();

    }));

И я не получаю ошибок.

Но в коде покрытия Стамбула.«Другой путь не выбран» все еще виден.

Eif (this.allowSubmitAgain) {

Таким образом, в этой строке все еще говорится, что другой путь не выбран.

, если ясделать это так:

 it('should not allow submit again beaucse form has errors', fakeAsync(() => {

        const spySaveDiploma = spyOn(diplomaServiceMock, 'saveDiplomaMetaData').and.callThrough();

        component.diplomaDataSubmitted();
        component.allowSubmitAgain = false;
        fixture.detectChanges();

        console.log('testcase');
        expect(component.allowSubmitAgain).toBe(false);
        expect(spySaveDiploma).not.toHaveBeenCalled();
    }));

Я получаю эту ошибку:

Expected spy saveDiplomaMetaData not to have been called.

Но что мне делать?

...