import { getBoundingClientRect } from '../utils/getBoundingClientRect';
import { Component } from '@angular/core';
import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing';
import { resolve } from "@angular-devkit/core";
@Component({
selector: 'test-cmp',
template: `Popover demo`
})
class TestComponent {
}
function getSpanElement(fixture: ComponentFixture): HTMLElement {
return fixture.nativeElement.querySelector(
'span'
) as HTMLElement;
}
describe('getBoundingClientRect', () => {
let fixture: ComponentFixture;
let span: HTMLElement;
beforeEach(waitForAsync(() =>
TestBed.configureTestingModule({
declarations: [TestComponent],
}).compileComponents()
));
beforeEach(() => {
fixture = TestBed.createComponent(TestComponent);
fixture.detectChanges();
span = getSpanElement(fixture);
jest
.spyOn(span, 'clientHeight', 'get')
.mockImplementation(() => 17);
jest
.spyOn(span, 'offsetLeft', 'get')
.mockImplementation(() => 124);
jest
.spyOn(span, 'offsetTop', 'get')
.mockImplementation(() => 522);
jest
.spyOn(span, 'offsetWidth', 'get')
.mockImplementation(() => 104);
jest
.spyOn(span, 'getBoundingClientRect')
.mockImplementation(() => {
return {
bottom: 539,
height: 17,
left: 123.515625,
right: 227.578125,
top: 522,
width: 104.0625,
x: 123.515625,
y: 522,
} as DOMRect;
});
jest
.spyOn(window, 'getComputedStyle')
.mockImplementationOnce((() => {
return {
borderTopWidth: "0px",
borderBottomWidth: "0px",
borderLeftWidth: "0px",
borderRightWidth: "0px",
} as CSSStyleDeclaration;
}));
});
afterAll(async () => {
await new Promise(resolve => setTimeout(() => resolve(), 500)); // avoid jest open handle error
});
it('calculates bounds rect correctly',
() => {
const element = getSpanElement(fixture);
const rect = getBoundingClientRect(element);
expect(rect.left).toEqual(123.515625);
expect(rect.top).toEqual(522);
expect(rect.width).toEqual(104.125);
expect(rect.height).toEqual(34);
expect(rect.right).toEqual(227.640625);
expect(rect.bottom).toEqual(556);
}
);
});