reactjs - Jest stub 方法

标签 reactjs jestjs mocha.js chai

我的一个 React 组件中有一个方法 loadDataFromLocalStorage() 。

loadDataFromLocalStorage()将从localStorage获取项目并返回它。

所以我正在为 myFunc() 编写单元测试用例。

myFunc(){
    var data = loadDataFromLocalStorage()();
    if(data) {
      return true;
    }    
  }

当我尝试运行测试时,我发现 loadDataFromLocalStorage() 没有从 localStorage 检索数据。所以我猜测试将无法访问 localStorage 并返回数据。

因此,作为替代方案,我需要 stub 值 loadDataFromLocalStorage() 并返回它,以便 myFunc 可以进行单元测试。

请指教..

最佳答案

这是解决方案,文件目录的结构:

.
├── __mocks__
│   └── loadDataFromLocalStorage.ts
├── index.spec.ts
├── index.ts
└── loadDataFromLocalStorage.ts

1 directory, 4 files

您的原始函数loadDataFromLocalStorage.ts:

function loadDataFromLocalStorage() {
  return () => {
    return '';
  };
}

export default loadDataFromLocalStorage;

您在 myFunc 中使用 loadDataFromLocalStorage 函数:

import loadDataFromLocalStorage from './loadDataFromLocalStorage';

const someModule = {
  myFunc() {
    const data = loadDataFromLocalStorage()();
    console.log(`data: ${data}`);
    if (data) {
      return true;
    }
  }
};

export { someModule };

模拟__mocks__目录中的loadDataFromLocalStorage函数:

function loadDataFromLocalStorage() {
  return () => {
    return 'mock data';
  };
}

export default loadDataFromLocalStorage;

单元测试:

jest.mock('./loadDataFromLocalStorage.ts');
import { someModule } from './';

describe('someModule', () => {
  it('t1', () => {
    expect.assertions(1);
    const actualValue = someModule.myFunc();
    expect(actualValue).toBeTruthy();
  });
});

单元测试结果:

 PASS  src/mock-function/questions-57494989/index.spec.ts
  someModule
    ✓ t1 (10ms)

  console.log src/mock-function/questions-57494989/index.ts:6
    data: mock data

Test Suites: 1 passed, 1 total
Tests:       1 passed, 1 total
Snapshots:   0 total
Time:        2.44s, estimated 3s

关于reactjs - Jest stub 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57494989/

相关文章:

javascript - 以适当的方式解构

reactjs - 组件安装时 Ref.current 未定义,当我需要它时它不会导致重新渲染

node.js - 模拟 zip.js lib 以便能够使用 jest

node.js - 我应该从头开始在 React Native 项目上使用 jest 或 jest-cli 吗?

node.js - 如何在nodeJS中模拟ftp服务器进行单元测试

node.js - 使用 Mocha 测试连接 Assets 编译的 js

reactjs - 在 useEffect Hook 中使用 axios 取消 token 时如何修复失败的测试

javascript - ReactJS 将对象复制到新的状态变量或在树中传递状态

javascript - Firebase 模拟器上的 Firebase 权限被拒绝错误

javascript - 在节点中使用 mocha 测试 angularjs 模块