javascript - 如何为自定义库开玩笑
问题描述
abc.js
import { form } from '@myCustomLib/validator'
const _validator = new form.particulars.Validator()
function sampleFunctionIWantToTest(formInfo) {
var error = _validator.fullValidation(formInfo)
if(error) {return true}
return false
}
我想为这个函数写一个测试。我想模拟 _validator.fullValidation(formInfo) 的结果
我该如何嘲讽?
解决方案
您可以使用jest.mock(moduleName, factory, options)来模拟@myCustomLib/validator
包。
例如
abc.js
:
import { form } from '@myCustomLib/validator';
const _validator = new form.particulars.Validator();
function sampleFunctionIWantToTest(formInfo) {
var error = _validator.fullValidation(formInfo);
if (error) {
return true;
}
return false;
}
export { sampleFunctionIWantToTest };
abc.test.js
:
import { form } from '@myCustomLib/validator';
const validatorMock = {
fullValidation: jest.fn(),
};
jest.mock(
'@myCustomLib/validator',
() => {
const formMock = {
particulars: {
Validator: jest.fn(() => validatorMock),
},
};
return { form: formMock };
},
{ virtual: true },
);
describe('62949328', () => {
afterAll(() => {
jest.resetAllMocks();
});
it('should return true', () => {
const mError = new Error('error message');
validatorMock.fullValidation.mockReturnValueOnce(mError);
const { sampleFunctionIWantToTest } = require('./abc');
const actual = sampleFunctionIWantToTest();
expect(actual).toBeTruthy();
expect(form.particulars.Validator).toBeCalledTimes(1);
});
it('should return false', () => {
validatorMock.fullValidation.mockReturnValueOnce(null);
const { sampleFunctionIWantToTest } = require('./abc');
const actual = sampleFunctionIWantToTest();
expect(actual).toBeFalsy();
expect(form.particulars.Validator).toBeCalledTimes(1);
});
});
覆盖率 100% 的单元测试结果:
PASS stackoverflow/62949328/abc.test.js (13.298s)
62949328
✓ should return true (6ms)
✓ should return false (1ms)
----------|---------|----------|---------|---------|-------------------
File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s
----------|---------|----------|---------|---------|-------------------
All files | 100 | 100 | 100 | 100 |
abc.js | 100 | 100 | 100 | 100 |
----------|---------|----------|---------|---------|-------------------
Test Suites: 1 passed, 1 total
Tests: 2 passed, 2 total
Snapshots: 0 total
Time: 15.161s
jestjs版本:"jest": "^25.5.4",
推荐阅读
- cypress - 有没有办法 2 在 cypress 中创建多个命令文件
- java - 如何手动排序 Swagger UI 上显示的端点?
- javascript - 如何使用 JavaScript 和 jQuery 动态添加文本?
- node.js - 我放入哈巴狗模板的 json 数据将 '<' 放在字符串的开头,将 '>' 放在结尾。为什么?我该如何摆脱它?
- python - 在不重新索引或丢失索引的情况下在列上连接不同形状的数据框
- laravel - 更新和销毁方法在 laravel eloquent 模型中不起作用?
- react-native - React Native - 用滚动动画底部标签栏
- java - Android Webview EvaluateJavascript 有时不返回响应
- google-apps-script - 除非已安装的触发器已经存在,否则如何创建“创建触发器”附加菜单选项?
- excel-2016 - 在 Excel 工作表中查找单词列表