小编Can*_*nta的帖子

在Jest中测试递归调用

我目前正在测试使用memoization + recursion的Fibonacci算法.

function memoization(num, hash = {'0': 0, '1':1}) {
  if (!hash.hasOwnProperty(num)) {
    hash[num] = memoization(num-1,hash) + memoization(num-2,hash);
  }
  return hash[num];
}
Run Code Online (Sandbox Code Playgroud)

我想在Jest中测试函数的memoization方面,以确保函数正确使用哈希并且不执行冗余工作:

test('is never run on the same input twice', ()=>{
    fib.memoization = jest.fn(fib.memoization);
    fib.memoization(30);
    expect(allUniqueValues(fib.memoization.mock.calls)).toBeTruthy();
  });
Run Code Online (Sandbox Code Playgroud)

但是,mock.calls仅报告使用初始参数值调用此函数一次,并且不跟踪其他递归调用.有任何想法吗?

recursion unit-testing jestjs

8
推荐指数
1
解决办法
2260
查看次数

如何测试从 mapDispatchToProps (React/Redux/Enzyme/Jest) 传递过来的函数

我想测试在模拟按钮单击时调用了从 mapDispatchToProps 传递的函数。

如何测试从 mapDispatchToProps 传递的函数被调用?

我试图通过道具传递一个模拟函数,但它不起作用。任何帮助将不胜感激。

下面是我的假类代码和测试示例。

我的组件

// All required imports

class App extends React.Component<Props> {
  render() {
    const { onClick } = this.props;
    return (
      <>
        <h1>Form</h1>
        <input />
        <button onClick={() => onClick()} />
      </>
    );
  }
}

const mapStateToProps = (state) => {
  return {
    state
  };
};

const mapDispatchToProps = (dispatch) => {
  return {
    onClick: () => dispatch(actions.onClick())
  };
};

export default connect(mapStateToProps, mapDispatchToProps)(App);
Run Code Online (Sandbox Code Playgroud)

我的测试文件

import { configure, mount } from 'enzyme';
import Adapter …
Run Code Online (Sandbox Code Playgroud)

reactjs jestjs redux enzyme

8
推荐指数
1
解决办法
6286
查看次数

Enzyme Jest window.getSelection()不起作用

如何解决我的情况?以下功能的Jest + Enzyme测试返回

TypeError: window.getSelection is not a function
Run Code Online (Sandbox Code Playgroud)

我的代码:

    _addNewAgent () {
    window.getSelection().removeAllRanges();

    const newAgent = generateNewAgent();
    const newDataBase = this.state.agentsDatabase;

    newDataBase.push(newAgent);

    this.setState({
        currentAgentProfile: newAgent,
        agentsDatabase:      newDataBase,
        infoDisplayContent:  'profile'
    });
}
Run Code Online (Sandbox Code Playgroud)

我的测试:

import React from 'react';
import { mount } from 'enzyme';
import App from '../containers/App';

const result = mount(
    <App />
);

test('add agent', () => {
const agentsList = result.state().agentsDatabase.length;

result.find('#addNewAgent').simulate('click');
expect(result.state().agentsDatabase.length).toBe(agentsList + 1);

expect(result.state().currentAgentProfile)
    .toEqual(result.state().agentsDatabase[agentsList]);

expect(result.state().infoDisplayContent).toBe('profile');
});
Run Code Online (Sandbox Code Playgroud)

testing bdd reactjs jestjs enzyme

7
推荐指数
2
解决办法
2611
查看次数

使用mount()的酶测试无法使用React模态对话框的内容

我有一个带有模态对话框的React组件(使用构建reactstrap,但其他人报告了类似的问题react-bootstrap和其他类型的模态组件).尽管它们在实际应用程序中渲染得很好,但是酶无法在模态中找到任何组件.最小的例子:

import React from 'react'
import { Modal } from 'reactstrap'

export default class MyModal extends React.Component {

    render() {
        return (
            <div className="outside"> Some elements outside of the dialog </div>
            <Modal isOpen={this.props.modalOpen}>
                <div className="inside"> Content of dialog </div>
            </Modal>
         );
    } 
}
Run Code Online (Sandbox Code Playgroud)

我想像这样测试内容(在这种情况下使用jest)

import React from 'react'
import MyModal  from './MyModal'
import { mount } from 'enzyme'

it('renders correctly', () => {
    const wrapper = mount( <MyModal modalOpen/> );

    expect(wrapper).toMatchSnapshot();

    // Passes
    expect(wrapper.find('.outside')).toHaveLength(1); …
Run Code Online (Sandbox Code Playgroud)

unit-testing modal-dialog reactjs jestjs enzyme

7
推荐指数
1
解决办法
4568
查看次数

使用jest /酶对formik组件进行单元测试

我已经整理了一个很好的基本联系表格.但是我现在需要开始编写我的单元测试,并且遇到了大量问题(比如我到目前为止只能设法获得快照测试).

首先,如果您没有填写所有必需的部分,那么当您单击"提交"按钮时,我正在尝试测试表单应该呈现我的验证消息.

我以为我可以通过调用handleSubmit()函数来实现这个目的: componentRender.find('Formik').instance().props.handleSubmit(badFormValues, { resetForm });

但是,当我运行时componentRender.debug(),我的验证消息没有被渲染.这就像没有调用validationSchema函数?

有什么特别需要做的吗?我觉得这个mapPropsToValues()函数正在工作,从查看状态对象,它正在填充我传递表单的值.我只是不明白为什么验证似乎被跳过了?

我已经在这2天了,并且通过谷歌找不到任何好的例子(可能是我的错)所以任何帮助都会受到大力赞赏.

这里是参考测试文件到目前为止:

import React from 'react';
import { shallow, mount } from 'enzyme';
import { BrowserRouter as Router } from 'react-router-dom';
import PartnerRegistrationForm from 'Components/partner-registration-form/PartnerRegistrationForm';

describe('PartnerRegistrationForm component', () => {
    const formValues = {
        companyName: 'some company',
        countryCode: 'GB +44',
        telNumber: 12345678,
        selectCountry: 'United Kingdom',
        postcode: 'ABC1 234',
        addressSelect: '123 street',
        siteName: 'blah',
        siteURL: 'https://www.blah.com',
        contactName: 'Me',
        email: 'me@me.com',
    };

    const componentShallow = shallow(<PartnerRegistrationForm {...formValues} …
Run Code Online (Sandbox Code Playgroud)

javascript reactjs jestjs enzyme formik

7
推荐指数
1
解决办法
4631
查看次数

如何以Mobx可观察状态测试反应组件

这是我组件的简化版本:

import React from 'react';
import { observable, action } from 'mobx';
import { observer } from 'mobx-react';
import { fromPromise } from 'mobx-utils';

@observer
export class MyComponent extends React.Component {
  @action componentDidMount() {
    const { store, params } = this.props;
    this.warehouse = store.findById(params.id);
  }

  @observable warehouse = fromPromise(Promise.resolve());

  render() {
    return this.warehouse.case({
      fulfilled: (value) => (
        <div>
          fulfilled
        </div>
      ),
      rejected: (error) => (
        <div>
          rejected
        </div>
      ),
      pending: () => (
        <div>
          pending
        </div>
      )
    });
  }
} …
Run Code Online (Sandbox Code Playgroud)

reactjs jestjs enzyme mobx mobx-react

6
推荐指数
1
解决办法
3490
查看次数

Jest createSpyObj

使用Chai,您可以创建一个间谍对象,如下所示:

chai.spy.object([ 'push', 'pop' ]);
Run Code Online (Sandbox Code Playgroud)

使用茉莉花,您可以使用:

jasmine.createSpyObj('tape', ['play', 'pause', 'stop', 'rewind']);
Run Code Online (Sandbox Code Playgroud)

什么是Jest等价物?

上下文:我目前正在将(打字稿)Jasmine测试迁移到(typescript)Jest.在这种情况下,迁移指南基本上没用:https://facebook.github.io/jest/docs/migration-guide.html与任何相对较新的技术一样,在这方面的文档中没有任何东西可以轻易找到.

jestjs

6
推荐指数
2
解决办法
7830
查看次数

在node_modules中对代码进行符号链接时,为代码覆盖配置jest

我正在尝试使用Jest重新构建一个Node项目进行测试.起初,我有我的所有.js,并.test.js在同一目录中的文件,并且一切都很好在世界- jest --coverage做了我的预期.

我现在改变了我的目录结构,测试工作,但我的报道报告没有.

这是我的目录结构,编辑删除node_modules 除了我的lib文件夹的符号链接.我正在通过符号链接关注我的模块提示requiring.

? tree
.
??? README.md
??? build
?   ??? index.js
??? jest.config.js
??? lib
?   ??? path.js
?   ??? pen.js
?   ??? section.js
?   ??? sprite.js
?   ??? utilities.js
??? node_modules
?   ??? itch <= symlink to my `lib` folder
??? package-lock.json
??? package.json
??? test
    ??? env
    ?   ??? foo.html
    ??? path.test.js
    ??? pen.test.js
    ??? section.test.js
    ??? sprite.test.js
    ??? utilities.test.js …
Run Code Online (Sandbox Code Playgroud)

javascript code-coverage node.js jestjs

6
推荐指数
0
解决办法
531
查看次数

Jest、Enzyme、React - 测试 Iframe OnLoad

我正在编写一个 React 组件,它将在 iframe 中加载 URL,然后当 iframe 的 onLoad 事件触发时,它将调用 contentWindow.postMessage()。我想使用 Jest、Enzyme 和 JSDOM 来证明此功能。

我的组件包装了react-iframe,看起来非常简单:

export class FilteredIframe extends React.PureComponent<FilteredIframeProps> {
  onload = (e:Window) => {
    console.log("ONLOAD CALLED");
    if (this.props.filters) {
        e.postMessage(this.props.filters, this.props.url);
    }
  }
  render() {
    return (<Iframe url={this.props.url}
        display="initial"
        position="static"
        onLoad={this.onload}
    />);
  }
}
Run Code Online (Sandbox Code Playgroud)

我试图找出如何让酶/jsdom 来测试这个,但我失败了:

test("Posts message once the frame has loaded", async () => {
  const payLoad = { data: "data" };
  const result = mount(<FilteredIframe url="https:///www.bing.com" filters={payLoad}/>);
})
Run Code Online (Sandbox Code Playgroud)

当开玩笑地运行这个时,我从未在控制台中看到“ONLOAD CALLED”消息。我需要为 jsdom 或酶做一些特殊的事情才能使其真正调用 onLoad 吗?

jsdom reactjs jestjs enzyme

5
推荐指数
1
解决办法
1万
查看次数

类型错误:sha256_1.default 不是函数

我在使用 jest 进行测试时遇到以下错误。我在这里使用非 es6 npm 包。当我不想进行任何通配符 * 导入时,就会出现此问题。我想做显式导入。

\n\n
//code\n\nimport sha256 from "crypto-js/sha256";\n\nexport const GetHashToken = (value) => {\n return sha256(value);\n};\n\n//test\n\nimport { GetHashToken, GetUtcTimeStamp } from \n"../../utils/ScheduleRepairUtility";\n\ndescribe("Get hash token utility", () => {\n  it("Should return sha-256 hex digit string for given value", () => {\n    const paramValue = "78436783465sears121212";   \n    expect(GetHashToken(paramValue))\n     .toBe("b87663752c7f5bf0967f74fd3523dece543\n      f447e96d9b1d478c7336781e1828b");\n  });\n});\n
Run Code Online (Sandbox Code Playgroud)\n\n

出现错误:

\n\n
\xe2\x97\x8f  Get hash token utility \xe2\x80\xba Should return sha-256 hex digit string for \n   given value\n\nTypeError: sha256_1.default is not a function\n
Run Code Online (Sandbox Code Playgroud)\n\n

我正在为我的项目使用react-typescript。任何帮助表示赞赏。 …

typescript ecmascript-6 reactjs webpack jestjs

5
推荐指数
2
解决办法
5307
查看次数