Javascript 单元测试代码

Javascript 单元测试代码,javascript,unit-testing,reactjs,react-helmet,Javascript,Unit Testing,Reactjs,React Helmet,我正在使用react头盔向head元素添加元素 <Helmet> <title>title</title> <meta name="description" content="description" /> <meta name="keywords" content="keywords" /> </Helmet> 标题 我试着这样写单元测试: it('should render metad

我正在使用react头盔向head元素添加元素

<Helmet>
     <title>title</title>
     <meta name="description" content="description" />
     <meta name="keywords" content="keywords" />
</Helmet>

标题
我试着这样写单元测试:

it('should render metadata', () => {
    const wrapper = mount(<Metadata/>);
    // this is not working.
    expect(document.title).to.equal("title");
});
it('应该呈现元数据',()=>{
const wrapper=mount();
//这是行不通的。
期望(文件标题)等于(标题);
});

我自己找到了答案。我做了以下工作:

it('should render metadata', () => {
    const wrapper = mount(<Metadata/>);
    // this will return all the markup assigned to helmet
    // which will get rendered inside head.
    const helmet = Helmet.peek();
    expect(helmet.title).to.equal("title");
});
it('应该呈现元数据',()=>{
const wrapper=mount();
//这将返回分配给头盔的所有标记
//将在头部内部进行渲染。
const helmet=helmet.peek();
期望(头盔、头衔)等于(头衔);
});

这就是单元测试的诀窍。

我在react测试库和JSDOM中遇到过类似的情况,但我不想让测试特定于头盔实现,因为这违反了react测试库的指导原则。我发现做显而易见的事情:

render(<App />)
await waitFor(...some DOM element)
expect(document.title).toEqual("title")

我假设React和Helmet之间有一些计时的事情,这意味着在呈现DOM的其余部分和在JSDOM中设置标题之间有一个延迟。

我可能错了,但是您不需要在expect中引用
包装器吗<代码>expect(wrapper.title).
或类似内容。头盔不会呈现内容,因此标题不会添加到标题中。抱歉,标题不会添加到文档中。谢谢,链接到此处
await waitFor(...some DOM element)
await waitFor( () => expect(document.title).toEqual("title"))