javascript - 当测试和测试对象在不同文件中时,从其他文件模拟导入的函数
问题描述
- 我正在使用 Jest 测试框架。
- 我
myService
要从myService.js
文件中测试服务。 - 我
myService.spec.js
在同一个文件夹中为测试创建单独的文件。 - 方法
myService.myMethod()
使用文件中的帮助myHelper()
程序helpers.js
。
有没有可能以某种方式嘲笑这个myHelper()
?
|
-- myService.js
-- myService.spec.js
-- myHelper.js
myService.js
:
import { myHelper } from './myHelper.js';
export class MyService {
myMethod() {
const myVar = myHelper(42); // I need to mock this
}
}
myService.spec.js
:
import { MyService } from './myService';
describe('my test', () => {
it('should work properly', () => {
expect(myService.myMethod()).toBe(24);
});
});
解决方案
您可以使用jest.mock(moduleName, factory, options)来模拟myHelper
模块和myHelper
功能。
例如
myService.js
:
import { myHelper } from './myHelper';
export class MyService {
myMethod() {
const myVar = myHelper(42);
return myVar;
}
}
myHelper.js
:
export function myHelper(n) {
return n;
}
myService.test.js
:
import { MyService } from './myService';
import { myHelper } from './myHelper';
jest.mock('./myHelper', () => {
return {
myHelper: jest.fn(),
};
});
describe('my test', () => {
it('should work properly', () => {
myHelper.mockReturnValueOnce(24);
const myService = new MyService();
expect(myService.myMethod()).toBe(24);
});
});
覆盖率 100% 的单元测试结果:
PASS stackoverflow/61370607/myService.test.js (13.137s)
my test
✓ should work properly (3ms)
--------------|---------|----------|---------|---------|-------------------
File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s
--------------|---------|----------|---------|---------|-------------------
All files | 100 | 100 | 100 | 100 |
myService.js | 100 | 100 | 100 | 100 |
--------------|---------|----------|---------|---------|-------------------
Test Suites: 1 passed, 1 total
Tests: 1 passed, 1 total
Snapshots: 0 total
Time: 15.028s
源代码:https ://github.com/mrdulin/react-apollo-graphql-starter-kit/tree/master/stackoverflow/61370607
推荐阅读
- c# - 如何在 ASP.NET Core 中设置多级身份验证?
- php - 在 PHP 中创建具有给定深度、根和父级数量的子级的树结构
- objective-c - 在 Objective-C 中调用 Swift 闭包
- c++ - png 中 CRLF CR 块的值
- c - 为什么返回静态指针而不是输出参数?
- python - 如何用 None 替换 NaN 和 NaT - pandas 0.24.1
- elasticsearch - 在 Elasticsearch 中搜索对象数组
- java - 如何执行一个简单的 jar?
- c# - Azure 函数 SDK 导致 Newtonsoft 问题
- javascript - 如何用jQuery替换innerHTML?