gpt4 book ai didi

reactjs - 如何使用回调测试 React ref?

转载 作者:行者123 更新时间:2023-12-04 13:46:02 28 4
gpt4 key购买 nike

enzyme 文档包含如何测试具有 ref 的节点与 wrapper.ref('nameOfRef') ,但这仅适用于只有一个字符串值的引用,如果我在 React 中有一个节点:

<span ref="secondRef" amount={4}>Second</span>

然后它的测试会写成:
expect(wrapper.ref('secondRef').prop('amount')).to.equal(4);

但是如果我有一个带有回调的 ref,那么如何测试它? Enzyme docs [1] 对此没有任何说明。例如,如果我有一个带有像这样的 ref 的节点:
<SomeCustomReactElement ref={_form => form = _form} />

谢谢指导。
[1]: http://airbnb.io/enzyme/docs/api/ReactWrapper/ref.html

最佳答案

您可以拨打 ref使用 wrapper.getElement()['ref'](mockRef) 手动回调.
例如。index.tsx :

import React, { Component } from 'react';

export class SomeCustomReactElement extends Component {
doSomething() {
console.log('do somthing');
}
render() {
return <span>some custom react element</span>;
}
}

export default class MyComponent extends Component {
handleRef = (ref: SomeCustomReactElement) => {
console.log('handle ref');
ref.doSomething();
};
render() {
return (
<div>
<SomeCustomReactElement ref={this.handleRef} />
</div>
);
}
}
index.test.tsx :
import React from 'react';
import { shallow } from 'enzyme';
import MyComponent, { SomeCustomReactElement } from './';

describe('48349435', () => {
it('should handle ref', () => {
const wrapper = shallow(<MyComponent />);
const mRef = {
doSomething: jest.fn(),
};
wrapper.find(SomeCustomReactElement).getElement()['ref'](mRef);
expect(mRef.doSomething).toBeCalledTimes(1);
});
});
单元测试结果:
 PASS  examples/48349435/index.test.tsx (7.984 s)
48349435
✓ should handle ref (44 ms)

console.log
handle ref

at Object.MyComponent.handleRef [as ref] (examples/48349435/index.tsx:14:13)

-----------|---------|----------|---------|---------|-------------------
File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s
-----------|---------|----------|---------|---------|-------------------
All files | 77.78 | 100 | 60 | 77.78 |
index.tsx | 77.78 | 100 | 60 | 77.78 | 5-8
-----------|---------|----------|---------|---------|-------------------
Test Suites: 1 passed, 1 total
Tests: 1 passed, 1 total
Snapshots: 0 total
Time: 10.273 s

关于reactjs - 如何使用回调测试 React ref?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48349435/

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