代码之家  ›  专栏  ›  技术社区  ›  MkMan

如何使用Cypress对React组件调用回调函数进行单元测试

  •  0
  • MkMan  · 技术社区  · 4 年前

    我正在尝试使用 cypress-react-unit-test 对我的组件进行单元测试。

    在这个例子中,我有一个按钮,它通过一个回调函数在点击时执行。我有下面的代码,但在突出显示的行中立即失败。错误消息是 expected stub to have been called at least once, but it was never called .

    import React from 'react';
    import { mount } from 'cypress-react-unit-test';
    
    const Button = ({ onClick }) => (
      <button onClick={onClick} data-test-ref="button">
        Hello
      </button>
    );
    
    describe('Button', () => {
      it('should call the onClick function', () => {
        const onClick = cy.stub();
    
        mount(<Button onClick={onClick} />);
        cy.get(`[data-test-ref=button]`).click();
    
        // expect(onClick).to.be.called; // fails
      });
    });
    

    我做错了什么?如何测试单击按钮时是否执行了onClick道具。

    谢谢

    0 回复  |  直到 4 年前
        1
  •  1
  •   Richard Matsen    4 年前

    基本上 expect() 在Cypress命令运行之前被执行。

    您需要将expect链接到 .then() 根据 toggle-spec 实例

    describe('Button', () => {
      it('should call the onClick function', () => {
        const onClick = cy.stub();
    
        mount(<Button onClick={onClick} />);
        cy.get(`[data-test-ref=button]`).click()
        .then(() => {
          expect(onClick).to.be.called; // succeeds
        });
    
      });
    });
    

    或者根据 stub 实例

    describe('Button', () => {
      it('should call the onClick function', () => {
        const onClick = cy.stub().as('my-button');
    
        mount(<Button onClick={onClick} />);
        cy.get(`[data-test-ref=button]`).click();
    
        cy.get('@my-button').should('have.been.called'); 
      });
    });