在发布此问题之前,我尝试在sqa stackexchange中进行搜索,但是我没有找到有关浅层和渲染的文章,因此希望有人可以在这里为我提供帮助。
什么时候应该在测试反应组件时使用浅化和渲染?根据airbnb文档,我对两者的区别提出了一些意见:
由于浅层将组件 作为一个整体 进行测试,因此应将其用于“父级”组件。(例如桌子,包装纸等)
渲染用于子组件。
我问这个问题的原因是,我很难确定应该使用哪一个(尽管文档说它们非常相似)
那么,我怎么知道在特定情况下使用哪个呢?
根据酶文档:
mount(<Component />)
对于完全DOM呈现,对于您的组件可能与DOM
API交互或可能需要完整html" target="_blank">生命周期才能完全测试组件的使用案例(例如componentDidMount等)是理想的选择
与
shallow(<Component />)
浅呈现对于约束自己将组件作为一个单元进行测试非常有用,并可以确保测试不会间接断言子组件的行为。
与
render
用于将响应组件呈现为 静态HTML 并分析生成的HTML结构。
您仍然可以在浅层渲染中看到底层的“节点”,因此,例如,您可以使用AVA作为规范运行器来执行类似(略做作)的示例:
let wrapper = shallow(<TagBox />);
const props = {
toggleValue: sinon.spy()
};
test('it should render two top level nodes', t => {
t.is(wrapper.children().length, 2);
});
test('it should safely set all props and still render two nodes', t => {
wrapper.setProps({...props});
t.is(wrapper.children().length, 2);
});
test('it should call toggleValue when an x class is clicked', t => {
wrapper.setProps({...props});
wrapper.find('.x').last().simulate('click');
t.true(props.toggleValue.calledWith(3));
});
请注意,浅层渲染支持 渲染 , 设置道具 , 查找选择器 甚至 合成事件 ,因此大多数情况下您都可以使用它。
但是,您将无法获得组件的完整生命周期,因此,如果您希望在componentDidMount中发生某些事情,则应使用mount(<Component />)
;
此测试使用Sinon监视组件的componentDidMount
test.only('mount calls componentDidMount', t => {
class Test extends Component {
constructor (props) {
super(props);
}
componentDidMount() {
console.log('componentDidMount!');
}
render () {
return (
<div />
);
}
};
const componentDidMount = sinon.spy(Test.prototype, 'componentDidMount');
const wrapper = mount(<Test />);
t.true(componentDidMount.calledOnce);
componentDidMount.restore();
});
以上将不会通过 浅渲染 或 渲染
render
只会为您提供html,因此您仍然可以执行以下操作:
test.only('render works', t => {
// insert Test component here...
const rendered = render(<Test />);
const len = rendered.find('div').length;
t.is(len, 1);
});
希望这可以帮助!
问题内容: 我知道他们两个都禁用了Nagle的算法。 我什么时候应该/不应该使用它们中的每一个? 问题答案: 首先,不是所有人都禁用Nagle的算法。 Nagle的算法用于减少有线中更多的小型网络数据包。该算法是:如果数据小于限制(通常是MSS),请等待直到收到先前发送的数据包的ACK,同时累积用户的数据。然后发送累积的数据。 这将对telnet等应用程序有所帮助。但是,在发送流数据时,等待A
问题内容: 在该类中,有两个字符串,和。 有什么不同?我什么时候应该使用另一个? 问题答案: 如果你的意思是和则: 用于在文件路径列表中分隔各个文件路径。考虑在上的环境变量。您使用a分隔文件路径,因此在上将是;。 是或用于拆分到特定文件的路径。例如在上,或
知道如何在我的测试中将属性更改为true吗?
问题内容: 在集成我以前从未使用过的Django应用程序时,我发现了用于定义类中函数的两种不同方式。作者似乎非常有意地使用了它们。第一个是我自己经常使用的: 另一个是我不使用的,主要是因为我不知道何时使用它,以及什么用途: 在Python文档中,装饰器的解释如下: 类方法将类作为隐式第一个参数接收,就像实例方法接收实例一样。 所以我想指的是自己(而不是实例)。我不完全理解为什么会这样,因为我总是可
问题内容: 什么是,什么时候应该使用它们? 我并不了解这些术语,因此当我回到家并开始使用Google Observer和Google搜索时,发现了来自不同资源的一些观点: 1)是一个类,是一个接口。 2)该类维护一个 列表。 3)当一个对象被更新时,它调用其每个的方法来通知它已被更改。 我发现这个例子: 但是我不明白为什么我们需要和?的用途和方法是什么? 问题答案: 有一个学生和一个留言板的具体示
问题内容: 在工作中进行大量重构的中间,我希望引入stdClass *作为从函数返回数据的一种方式,并且我试图找到非主观论据来支持我的决定。 是否有任何情况下最好使用一种而不是另一种? 使用stdClass而不是数组有什么好处? 有人会说,函数必须尽可能少且特定,才能返回一个值。 我决定使用stdClass是暂时的,因为从长远来看,我希望为每个进程找到正确的Value Objects。 问题答案: