ReactJS和开玩笑:如何为element.offsetWidth使用模拟值?

时间:2019-11-20 10:10:57

标签: javascript reactjs testing jestjs

我有一个组件,该组件以编程方式创建一个span元素并向其中添加文本,然后检查其offsetWidth。在我的测试中,该值为0。我想知道如何将其“强制”为另一个任意值以进行测试。

我尝试了以下方法,但无济于事:

Object.defineProperty(HTMLElement.prototype, 'offsetWidth', { configurable: true, value: 500 })

有人能指出我正确的方向吗?谢谢!

Github:https://github.com/sickdyd/react-dynamic-badge

这是组件测试文件的链接:https://github.com/sickdyd/react-dynamic-badge/blob/master/src/test/test/DynamicBadge.test.js

1 个答案:

答案 0 :(得分:0)

为解决此问题,我使用了一种称为依赖注入(https://chipcullen.com/how-to-fake-the-window-object-in-jest-and-enzyme/)的技术

基本上通过测试用的道具,并在您的代码中使用它:

// for testing purposes use props.testRulerSpanWidth
// if it exists, otherwise use the default rulerSpan.offestWidth

const rulerSpanWidth = props.testRulerSpanWidth ?
                        props.testRulerSpanWidth
                       :
                        rulerSpan.offsetWidth;