programing

단위 테스트 오류: 약속을 호출할 수 없습니다.동기화 테스트 내에서

bestprogram 2023. 10. 4. 22:13

단위 테스트 오류: 약속을 호출할 수 없습니다.동기화 테스트 내에서

유닛 테스트 각도 2 어플리케이션을 조사하기 시작했지만, 가장 간단한 예시에도 갇혀있습니다.간단한 테스트를 실행하여 효과가 있는지 확인하고 싶습니다. 기본적으로 제가 원하는 것은 제목 페이지의 값과 테스트의 값을 비교하는 것입니다.

이것이 제가 받는 오류인데, 제가 보기에는 모든 것이 동기화되어 있기 때문에 어디에서 오류가 발생하는지 모르겠습니다.

오류: 오류: 약속을 호출할 수 없습니다.동기화 테스트를 수행합니다.

단위 테스트:

import { ComponentFixture, TestBed } from '@angular/core/testing';
import { By }              from '@angular/platform-browser';
import { DebugElement, Input}    from '@angular/core';
import { ToDoComponent } from './todo.component';
import { FormsModule } from '@angular/forms';
describe(("test input "),() => {
    let comp:    ToDoComponent;
    let fixture: ComponentFixture<ToDoComponent>;
    let de:      DebugElement;
    let el:      HTMLElement;

    beforeEach(() => {
        TestBed.configureTestingModule({
            declarations: [ ToDoComponent ],
            imports: [ FormsModule ]
        })
        .compileComponents();  
    });

    fixture = TestBed.createComponent(ToDoComponent);
    comp = fixture.componentInstance;
    de = fixture.debugElement.query(By.css("h1"));
    el = de.nativeElement;

    it('should display a different test title', () => {
        comp.pageTitle = 'Test Title';
        fixture.detectChanges();
        expect(el.textContent).toBe('Test Title423');
    });
});

내 구성요소:

import {Component} from "@angular/core";
import {Note} from "app/note";

@Component({
    selector : "toDoArea",
    templateUrl : "todo.component.html"
})

export class ToDoComponent{
    pageTitle : string = "Test";
    noteText : string ="";
    noteArray : Note[] = [];
    counter : number = 1;
    removeCount : number = 1;

    addNote() : void {

        if (this.noteText.length > 0){
            var a = this.noteText;
            var n1 : Note = new Note();
            n1.noteText = a;
            n1.noteId = this.counter;
            this.counter = this.counter + 1;
            this.noteText = "";
            this.noteArray.push(n1);        
        }

    }

    removeNote(selectedNote : Note) :void{
        this.noteArray.splice(this.noteArray.indexOf(selectedNote),this.removeCount);
    }

}

변수 초기화를 각 이전의 a 안으로 이동합니다.

테스트 베드에서 물건을 꺼내거나 고정 장치나 부품을 관리해서는 안 됩니다.describe범위. 당신은 시험 실행 범위 내에서만 이 일들을 해야 합니다: 내부 a.beforeEach/beforeAll,afterEach/afterAll, 아니면 안에서it.

describe(("test input "), () => {
  let comp: ToDoComponent;
  let fixture: ComponentFixture<ToDoComponent>;
  let de: DebugElement;
  let el: HTMLElement;

  beforeEach(async(() => {
    TestBed.configureTestingModule({
        declarations: [ToDoComponent],
        imports: [FormsModule]
      })
      .compileComponents();
  }));

  beforeEach(() => {
    fixture = TestBed.createComponent(ToDoComponent);
    comp = fixture.componentInstance;
    de = fixture.debugElement.query(By.css("h1"));
    el = de.nativeElement;
  })


  it('should display a different test title', () => {
    comp.pageTitle = 'Test Title';
    fixture.detectChanges();
    expect(el.textContent).toBe('Test Title423');
  });

});

참고 항목

다른 이유로 같은 오류가 발생했습니다.저는.TestBed.get(Dependency)에 전화를 걸다describe블록. 수정 작업이 진행 중이었습니다.it막다른 골목

틀렸습니다:

describe('someFunction', () => {
    const dependency = TestBed.get(Dependency); // this was causing the error

    it('should not fail', () => {
        someFunction(dependency);
    });
});

고정:

describe('someFunction', () => {
    it('should not fail', () => {
        const dependency = TestBed.get(Dependency); // putting it here fixed the issue
        someFunction(dependency);
    });
});

언급URL : https://stackoverflow.com/questions/43186533/unit-test-error-cannot-call-promise-then-from-within-a-sync-test