gpt4 book ai didi

unit-testing - Angular2/Jasmine 期望为空会使浏览器崩溃

转载 作者:太空狗 更新时间:2023-10-29 17:43:29 25 4
gpt4 key购买 nike

我在测试我的一个组件时遇到了一些问题。测试如下:

describe('SmpEventsNewCompactEventComponent', () => {

const specService: SmpSpecService = new SmpSpecService();

describe('Component rendering', () => {
let componentInstance: any;
let componentFixture: ComponentFixture<any>;
let cssSelector: string;

beforeEach(() => {
TestBed.configureTestingModule({
imports: [
MaterialModule.forRoot()
],
declarations: [
SmpEventsCompactEventComponent,
SmpEventsAddressComponent
],
providers: [
{ provide: SMP_OT_HELPER, useValue: newOtHelperInstance() },
DatePipe,
SmpEventTypeCheckerService,
SmpLangService
]
});

componentFixture = TestBed.createComponent(SmpEventsCompactEventComponent);
componentInstance = componentFixture.componentInstance;
});

describe('Global', () => {
it('GIVEN there are date/time AND address ' +
'WHEN component loads THEN display event', () => {
//// TEST ONE
componentInstance.isEventEnabled = true;
cssSelector = '.events-compact-event';

let debugElement = specService.queryDebugElement(
componentFixture, cssSelector);

expect(debugElement).not.toBeNull();
});

it('GIVEN there are no date/time AND no address ' +
'WHEN component loads THEN do not display event', () => {
//// TEST TWO
componentInstance.isEventEnabled = true;
//componentInstance.isAddressEnabled = false;
// componentInstance.isDateEnabled = false;
cssSelector = '.events-compact-event';

let debugElement = specService.queryDebugElement(
componentFixture, cssSelector);

console.log('--------------', debugElement.nativeElement);
// expect(debugElement.nativeElement).toBe(null);
// expect(true).toBe(true);
expect(debugElement).not.toBeNull();
});
});
});

specService.queryDebugElement 如下:

  queryDebugElement(fixture: ComponentFixture<any>, cssSelector: string): DebugElement {
fixture.detectChanges();

return fixture.debugElement.query(By.css(cssSelector));
}

每当我使用

expect(true).toBe(true);

expect(debugElement.nativeElement).toBe(null);

expect(debugElement).not.toBeNull();

在测试二中,测试正常工作或失败,但每当我使用

expect(debugElement).toBeNull();

karma 崩溃使用的浏览器(使用 chrome/chromium/PhantomJs 测试)并且没有给出任何发生的线索。这不是简单的“期望假为真”失败,测试上下文完全崩溃。

您是否看到任何可以解释此行为的内容?

最佳答案

Angular 的 DebugElement 是一个相当复杂的对象,而 Jasmine 的 expect 似乎包含递归部分(或者至少是复杂到需要许多不同函数调用的算法) ...因此不推荐在单元测试中直接使用 DebugElement。它通常以深度递归和浏览器内存泄漏告终。

在你的情况下,我会尝试:

let nl: NodeList = componentFixture.nativeElement.querySelectorAll('.events-compact-event');

expect(nl.length).toBeFalsy;

这样,您就不会使用 DebugElement,并且您不会面临在测试中出现未定义值的风险(除了那些您确实需要未定义的值)。代码覆盖率和结果应该是等效的。

看看这篇文章:https://medium.com/@martatatiana/poor-detective-angular2-browser-crash-and-debugelement-f0a651dbf33

关于unit-testing - Angular2/Jasmine 期望为空会使浏览器崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41329366/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com