【发布时间】:2020-09-28 22:03:57
【问题描述】:
我有一个接受参数并返回JSX.Element的函数
//title.tsx
export const getTitle = (pageTitle: string) => {
return <title> {pageTitle} </title>;
}
这就是我测试它的方式:
describe('Title component', () => {
test("Title component is rendered", () => {
const wrapper = getTitle('abc');
const expectedText = `abc`;
const actualText = wrapper; //wrapper.text() does not exists;
expect(actualText).toContain(expectedText);
});
});
测试失败,输出如下:
Expected value: "abc"
Received object: <React.Fragment><title>abc</title></React.Fragment>
根据一些研究,我在 Google 上找到了一个解决方案,它假定函数是类组件的一部分。该解决方案要求wrapper 是returned by shallow while passing the class-based component ControlledForm)。这不适用于我的情况。
如何从函数返回的
JSX.element中提取文本值与一些预期的文本进行比较?
或者有其他方法可以测试这种情况吗?
【问题讨论】:
-
我开始为您编写答案,但意识到编写正确的测试并没有解决您的核心问题。我会在这部分工作。同时,让我们弄清楚一些术语:
getTitle()是一个返回 JSX 的函数,但它不是一个函数式组件。功能组件必须将单个 JavaScript 对象作为其唯一参数。传统上我们将此参数称为props。主要区别在于,如果您将<getTitle>正确地编写为功能组件,则不能将其用作 JSX 标记。相反,您必须直接致电getTitle()。 -
@Code-Apprentice 感谢指正!
标签: javascript reactjs typescript unit-testing tdd