我有一个名为<Error />
的React组件,它可以接受字符串或实际的Error()
对象。
下面的Jest / Enzyme代码有效:
it('renders with error prop', () => {
const component = shallow(<Error error="Foobar" />);
expect(component.text()).toMatchSnapshot();
expect(component.text()).toEqual('Foobar');
});
但是以下内容却没有:
it('renders with new Error() error prop', () => {
const error = new Error('Foobar');
const component = shallow(<Error error={error} />);
expect(component.text()).toMatchSnapshot();
expect(component.text()).toEqual('Foobar');
});
new Error()
行导致RangeError: Maximum call stack size exceeded
我试图将其包装在try {} catch () {}
中,但它只会吞没所有东西。
我尝试以expect(() => { ... })
的身份进行操作,但是我无法让它运行断言-看来,这只有在您想将其通过管道传输到.toThrow()
以下内容乍看起来很有希望,但实际上并没有将任何内容发送到catch中的error
参数:
it('renders with new Error() error prop', () => {
try {
new Error('Foobar');
}
catch (error) {
const component = shallow(<Error error={error} />);
expect(component.text()).toMatchSnapshot();
expect(component.text()).toEqual('Foobar');
}
});
有什么想法吗?预先感谢。
答案 0 :(得分:1)
在测试文件中尝试一下:
class Child {
public:
Child() { py::print("Allocating child."); }
Child(const Child &) = default;
Child(Child &&) = default;
~Child() { py::print("Releasing child."); }
};
py::class_<Child>(m, "Child")
.def(py::init<>());
class Parent {
public:
Parent() { py::print("Allocating parent."); }
~Parent() { py::print("Releasing parent."); }
void addChild(Child *) { }
Child *returnChild() { return new Child(); }
Child *returnNullChild() { return nullptr; }
};
py::class_<Parent>(m, "Parent")
.def(py::init<>())
.def(py::init([](Child *) { return new Parent(); }), py::keep_alive<1, 2>())
.def("addChild", &Parent::addChild)
.def("addChildKeepAlive", &Parent::addChild, py::keep_alive<1, 2>())
.def("returnChild", &Parent::returnChild)
.def("returnChildKeepAlive", &Parent::returnChild, py::keep_alive<1, 0>())
.def("returnNullChildKeepAliveChild", &Parent::returnNullChild, py::keep_alive<1, 0>())
.def("returnNullChildKeepAliveParent", &Parent::returnNullChild, py::keep_alive<0, 1>());
您也可以尝试使用其他名称来命名错误组件。
希望这会有所帮助。