如何使用 react+enzyme select 元素文本
How to select element text with react+enzyme
正如其名。一些示例代码:
let wrapper = shallow(<div><button class='btn btn-primary'>OK</button></div>);
const b = wrapper.find('.btn');
expect(b.text()).to.be.eql('OK'); // fail
还有 html
方法 returns 元素的内容以及元素本身加上所有属性,例如它给出 <button class='btn btn-primary'>OK</button>
。所以我想,最坏的情况是,我可以调用 html
并对其进行正则表达式,但是...
有没有办法只获取元素的内容,这样我就可以对其进行断言。
不要忘记您正在将一个节点(ReactElement)传递给 shallow
函数,并且 React 中没有 HTML 属性 class
。你必须使用 className
.
来自 React 文档
All attributes are camel-cased and the attributes class
and for
are
className
and htmlFor
, respectively, to match the DOM API
specification.
这个测试应该有效
const wrapper = shallow(<div><button className='btn btn-primary'>OK</button></div>);
const button = wrapper.find('.btn');
expect(button.text()).to.be.eql('OK');
我认为@louis-barranqueiro 可能已经回答了您的基本问题。也就是说,你想要一个 CSS selector 所以你应该使用 className
而不是 class
.
但是,要尝试回答如何使用您给出的实际示例 select 元素文本的问题:
let wrapper = shallow(<div><button class='btn btn-primary'>OK</button></div>);
你需要使用类似 object property selector 的东西,例如:
expect(wrapper.find({ class: "btn btn-primary" }).text()).to.equal('OK');
或道具语法:
expect(wrapper.find('[class="btn btn-primary"]').text()).to.equal('OK');
(或更明确):
expect(wrapper.find('button[class="btn btn-primary"]').text()).to.equal('OK');
如果您在查找 "includes text" 时发现了这个,请尝试:
it('should show correct text', () => {
const wrapper = shallow(<MyComponent />);
expect(wrapper.text().includes('my text')).toBe(true);
});
我 运行 在搜索 select all/some textarea
和 jest
中的文本时 post enzyme
。对于那些正在寻找相同内容的人,您可以对 select 一些文本执行以下操作(前提是您已经知道长度):
let wrapper;
let textareaNode;
beforeEach(() => {
wrapper = mount(<Textarea value="Hello world" />);
textareaNode = () => wrapper.find("textarea").getDOMNode();
});
it("selects all of the select within the given range", () => {
textareaNode().setSelectionRange(0, 6);
wrapper.find("button").simulate("click"); // this would delete the selection via a ref
expect(wrapper.find("textarea").props().value).toEqual("world");
});
正如其名。一些示例代码:
let wrapper = shallow(<div><button class='btn btn-primary'>OK</button></div>);
const b = wrapper.find('.btn');
expect(b.text()).to.be.eql('OK'); // fail
还有 html
方法 returns 元素的内容以及元素本身加上所有属性,例如它给出 <button class='btn btn-primary'>OK</button>
。所以我想,最坏的情况是,我可以调用 html
并对其进行正则表达式,但是...
有没有办法只获取元素的内容,这样我就可以对其进行断言。
不要忘记您正在将一个节点(ReactElement)传递给 shallow
函数,并且 React 中没有 HTML 属性 class
。你必须使用 className
.
来自 React 文档
All attributes are camel-cased and the attributes
class
andfor
areclassName
andhtmlFor
, respectively, to match the DOM API specification.
这个测试应该有效
const wrapper = shallow(<div><button className='btn btn-primary'>OK</button></div>);
const button = wrapper.find('.btn');
expect(button.text()).to.be.eql('OK');
我认为@louis-barranqueiro 可能已经回答了您的基本问题。也就是说,你想要一个 CSS selector 所以你应该使用 className
而不是 class
.
但是,要尝试回答如何使用您给出的实际示例 select 元素文本的问题:
let wrapper = shallow(<div><button class='btn btn-primary'>OK</button></div>);
你需要使用类似 object property selector 的东西,例如:
expect(wrapper.find({ class: "btn btn-primary" }).text()).to.equal('OK');
或道具语法:
expect(wrapper.find('[class="btn btn-primary"]').text()).to.equal('OK');
(或更明确):
expect(wrapper.find('button[class="btn btn-primary"]').text()).to.equal('OK');
如果您在查找 "includes text" 时发现了这个,请尝试:
it('should show correct text', () => {
const wrapper = shallow(<MyComponent />);
expect(wrapper.text().includes('my text')).toBe(true);
});
我 运行 在搜索 select all/some textarea
和 jest
中的文本时 post enzyme
。对于那些正在寻找相同内容的人,您可以对 select 一些文本执行以下操作(前提是您已经知道长度):
let wrapper;
let textareaNode;
beforeEach(() => {
wrapper = mount(<Textarea value="Hello world" />);
textareaNode = () => wrapper.find("textarea").getDOMNode();
});
it("selects all of the select within the given range", () => {
textareaNode().setSelectionRange(0, 6);
wrapper.find("button").simulate("click"); // this would delete the selection via a ref
expect(wrapper.find("textarea").props().value).toEqual("world");
});