Модульное тестирование в Angular not.toBe (true) против toBeFalsy () - PullRequest
1 голос
/ 07 января 2020

Я пишу Angular модульное тестирование, с которым сталкиваюсь с ошибкой. Если я напишу в BeFalsy (), тест провалится. Но если я напишу not.toBe (true), тест будет работать.

Может кто-нибудь мне помочь.

let fixture: ComponentFixture<RootComponent>;
let debugElement: DebugElement;

beforeEach(async () => {
    fixture = TestBed.createComponent(RootComponent);
    await executeChangeDetection(fixture);
    component = fixture.componentInstance;
    debugElement = fixture.debugElement.query(By.css('#overlay'));
  });


it('should hide overlay and reset timeout', () => {
    const appState = new ApplicationStateService(null as any);
    appState.timeout = false;
    component.isTimeoutOverlayVisible = appState.timeout;
    fixture.detectChanges();
    expect(debugElement.nativeElement).toBeFalsy();
  });

toBeFalsy () тест не пройден, но как придет сообщение.
Expected <overlay id="overlay">...</overlay> to be falsy.

not.toBe (true) тест будет работать.

1 Ответ

2 голосов
/ 07 января 2020

В javascript есть истины и истины. Когда что-то верно, это, очевидно, правда или ложь. Когда что-то является правдивым, оно может быть или не быть логическим, но значение «cast» является логическим.

, поэтому в вашем случае toBeFalsy означает, что нативный элемент не существует или равен null / undefined.

not.toBe(true) проверяет, является ли nativeElement !== true, который также проверяет тип и значение, и, конечно, значение нативного элемента не равно 'true' как логический тип.

для получения дополнительной информации проверьте: toBe (true) против toBeTruthy () против toBeTrue ()

...