reactjs - 开玩笑的存根方法
问题描述
我的一个反应组件中有一个方法 loadDataFromLocalStorage() 。
loadDataFromLocalStorage() 将从 localStorage 获取项目并将其返回。
所以我正在为 myFunc() 编写单元测试用例。
myFunc(){
var data = loadDataFromLocalStorage()();
if(data) {
return true;
}
}
当我尝试运行测试时,我看到 loadDataFromLocalStorage() 没有从 localStorage 中检索数据。所以我猜测试将无法访问 localStorage 并返回数据。
因此,作为替代方案,我需要存根 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;
你在你的使用loadDataFromLocalStorage
函数myFunc
:
import loadDataFromLocalStorage from './loadDataFromLocalStorage';
const someModule = {
myFunc() {
const data = loadDataFromLocalStorage()();
console.log(`data: ${data}`);
if (data) {
return true;
}
}
};
export { someModule };
目录中的模拟loadDataFromLocalStorage
功能__mocks__
:
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
推荐阅读
- vowpalwabbit - vowpal wabbit 中的主动学习为每个文档返回 1.0 的重要性
- java - 使用 JsonParser 的杰克逊反序列化正在跳过第一个键值对 @context
- firebase - 如何允许在实时数据库规则中共享子文档?
- python - 使用面部标志的头部姿势估计
- docker - 如何在现有的 Alpine docker 容器中安装 php?
- javascript - 如何使用替换或其他方法来删除/替换此数组中的锚点/href 标签?
- python - 递归获取嵌套字典项
- bazel - 如何减少 Bazel 中分析阶段的运行时间?
- python - 获取有关 OpenML 数据集的元数据
- ruby - 如何从文件中读取数据,然后使用 Clojure 将该文件拆分为多个文件?