【发布时间】:2019-11-08 03:30:29
【问题描述】:
我正在尝试为我的测试操作 documentElement lang 属性。 并且无法弄清楚我怎么能做到这一点。我已经尝试在 Jest 配置中定义 setupFiles - 这让我有可能定义它并且没有选项可以为不同的测试更改它 - 如下所述:Mocking `document` in jest
部分测试代码如下所示:
const lang: string = document.documentElement.lang ?
document.documentElement.lang : Constraints.DEFAULT_LANGUAGE;
测试如下所示:
test('should pass `en` language when document hasn`t any specified', () => {
const spy = jest.spyOn(window.document, 'documentElement', 'get');
expect(spy).toHaveBeenCalled();
});
还有 setupFiles:
Object.defineProperty(document, 'documentElement', {
writable: true,
configurable: true,
value: document.createElement('document')
});
当我有 setupFiles 我得到错误:
Property documentElement does not have access type get
但是,当我尝试在未配置 setupfile.js 的情况下对其进行监视时,永远不会调用 spy。
编辑
我想要实现的更清晰的示例:
const lang: string = document.documentElement.lang ?
document.documentElement.lang : Constraints.DEFAULT_LANGUAGE;
component.src = `/${lang}/mysite`;
test('should pass `de` language when document has one specified', () => {
const spy = jest.spyOn(window.document, 'documentElement', 'get');
const mockElement = document.createElement('document');
mockElement.lang = 'de';
spy.mockReturnValue(mockElement);
expect(component.src).toContain('/de/');
});
在测试中我得到了:
expect(received).toContain(expected) // indexOf
Expected substring: "/de/"
Received string: "http://localhost/en/mysite"
【问题讨论】:
标签: javascript typescript unit-testing jestjs