Reactjs 测试回调函数jest react

Reactjs 测试回调函数jest react,reactjs,testing,jestjs,ts-jest,Reactjs,Testing,Jestjs,Ts Jest,我正在尝试测试此功能: export const validateName = (rule, value, callback) => { let re = new RegExp(nameRegex) if (value && !value.match(re)) { callback(i18n.t('name_validation')) } callback() } 基本上,函数将检测在表单中使用函数的输入中是否输入了特殊字符 我使用jest作为测试

我正在尝试测试此功能:

export const validateName = (rule, value, callback) => {
  let re = new RegExp(nameRegex)
  if (value && !value.match(re)) {
    callback(i18n.t('name_validation'))
  }
  callback()
}
基本上,函数将检测在表单中使用函数的输入中是否输入了特殊字符

我使用jest作为测试库,我有:

describe('Test suite', () => {
  it('My test case', (done) => {
    function callBack(data) {
      try {
        expect(data).toBe(i18n.t('name_validation'))
        done()
      } catch (error) {
        done(error)
      }
    }
    validateName('name', '.', callBack)

    console.log(validateName('name', '.', callBack))
  })
})
到目前为止,我得到的一切都是返回未定义的

  Expected: "Only lowercase letters, numbers and \"-\" are allowed!"
  Received: undefined


我已经挣扎了好几天了,尝试了所有的事情都没有成功,任何帮助都会很感激的

你应该传递一个模拟的回调,并断言它将以预期的值被调用

例如

index.ts

export const nameRegex = '^([a-z0-9])([a-z0-9.-]*)$';

export const validateName = (rule, value, callback) => {
  let re = new RegExp(nameRegex);
  if (value && !value.match(re)) {
    callback('name_validation');
  }
  callback();
};
import { validateName } from './';

describe('67598859', () => {
  it('should pass', () => {
    const callback = jest.fn();
    validateName('name', '.', callback);
    expect(callback).toBeCalledWith('name_validation')
  });

  it('should pass', () => {
    const callback = jest.fn();
    validateName('name', 'a', callback);
    expect(callback).toBeCalledWith()
  });
});
index.test.ts

export const nameRegex = '^([a-z0-9])([a-z0-9.-]*)$';

export const validateName = (rule, value, callback) => {
  let re = new RegExp(nameRegex);
  if (value && !value.match(re)) {
    callback('name_validation');
  }
  callback();
};
import { validateName } from './';

describe('67598859', () => {
  it('should pass', () => {
    const callback = jest.fn();
    validateName('name', '.', callback);
    expect(callback).toBeCalledWith('name_validation')
  });

  it('should pass', () => {
    const callback = jest.fn();
    validateName('name', 'a', callback);
    expect(callback).toBeCalledWith()
  });
});
测试结果:

 PASS  examples/67598859/index.test.tsx (7.776 s)
  67598859
    ✓ should pass (3 ms)
    ✓ should pass (1 ms)

----------|---------|----------|---------|---------|-------------------
File      | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s 
----------|---------|----------|---------|---------|-------------------
All files |     100 |      100 |     100 |     100 |                   
 index.ts |     100 |      100 |     100 |     100 |                   
----------|---------|----------|---------|---------|-------------------
Test Suites: 1 passed, 1 total
Tests:       2 passed, 2 total
Snapshots:   0 total
Time:        8.576 s

谢谢!,它只是工作,我想在这个解决方案之前,我尝试了其他一切都没有成功