React / Jest:如何模拟函数来自第三方软件包

时间:2017-12-01 01:42:48

标签: reactjs unit-testing jestjs

我很擅长使用Jest创建单元测试。我正在尝试为使用第三方软件包的组件编写测试,该软件包可以获取applanga(翻译)密钥。

还有一点需要注意的是,该函数是一个HOC,我觉得这对于模拟来说有点棘手。我得到的一些错误是translate is not a functioncan't perform getState of undefined任何指针都非常感谢!

编辑:在玩了一下之后,我意识到我需要的只是嘲笑一些功能。我现在遇到的一个问题是能够找到无状态组件。下面,您可以从控制台看到它打印出元素,但不是像我预期的那样BannerText,而是打印Component

代码(为简洁起见,删除了一些代码)

import { withTranslate } from 'senf-translations';

export const BannerText = ({ index, children, translateRaw }) => (
    <div>
        <h4>
            {translateRaw(`store.banner-item-1`)}
        </h4>
    </div>
);

const BannerItem = props => (
    <div>
        <div>
            <BannerText {...props}/>
        </div>
    </div>
);

export default withTranslate(['store'])(BannerItem);

测试

import React from 'react';
import { shallow } from 'enzyme';
import BannerItem from '../src/modules/banners/BannerItem';

describe('<BannerItem />', () => {
    const mock = jest.fn();
    const props = {
        translateRaw: mock,
    };
    let component;

    it('render banner item', () => {
        component = shallow(<PureBannerItem {...props} />);
        console.log(component.debug());

        expect(component.find('BannerText')).toHaveLength(1);
    });
});

Console.debug()输出

<div className="fela-gzvaff">
  <div className="fela-10318hh">
    <Component translateRaw={[Function]} />
  </div>
</div>

0 个答案:

没有答案