Edu*_*nto 4 javascript uuid jestjs
因此,在寻找问题的答案的过程中,我发现了以下信息:开玩笑:如何全局模拟node-uuid(或任何其他导入的模块)
我已经尝试了答案,但似乎无法正确使用它,因为它给了我未定义的错误。我是测试领域的新手,所以请原谅任何重大错误:
这是我的第一个方法
const mockF = jest.mock('uuid');
mockF.mockReturnValue('12345789');
Run Code Online (Sandbox Code Playgroud)
但是它无法识别功能。
我尝试了“ mockF.mockReturnValue不是一个函数”。
然后我尝试按照帖子的建议进行手动模拟,但似乎无法使其正常工作,您能帮我吗?谢谢
这是整个测试是否有帮助:
const faker = require('faker');
const storageUtils = require('../../storage/utils');
const utils = require('../utils/generateFile');
const { generateFileName } = storageUtils;
const { file } = utils;
test('should return a valid file name when provided the correct information', () => {
// ARRANGE
// create a scope
const scope = {
type: 'RECRUITER',
_id: '987654321',
};
// establish what the expected name to be returned is
const expectedName = 'r_987654321_123456789.png';
jest.mock('uuid/v4', () => () => '123456789');
// ACTION
const received = generateFileName(file, scope);
// ASSERT
// expect the returned value to equal our expected one
expect(received).toBe(expectedName);
});
Run Code Online (Sandbox Code Playgroud)
小智 36
我想我不妨在这里添加我的解决方案,供后代使用。以上都不是我所需要的:
jest.mock('uuid', () => ({ v4: () => '123456789' }));
Run Code Online (Sandbox Code Playgroud)
顺便说一句,使用变量而不是'123456789'
破坏它。
这应该在我们有导入的地方进行模拟,并且不需要您uuid
在规范文件中显式导入。
see*_*etd 11
假设有以下测试文件,您可以使用 jest.spyOn 调用来模拟 uuid。
测试规范.js
import uuid from 'uuid';
import testTarget from './testTarget';
describe('mock uuid', () => {
it('should return testid }', () => {
// Arrange
const anonymousId = 'testid';
const v1Spy = jest.spyOn(uuid, 'v1').mockReturnValue(anonymousId);
// Act
const result = testTarget();
// Assert
expect(result).toEqual(anonymousId);
expect(v1Spy).toHaveBeenCalledTimes(1);
});
});
Run Code Online (Sandbox Code Playgroud)
测试目标.js
import uuid from 'uuid';
export default function() {
return uuid.v1();
}
Run Code Online (Sandbox Code Playgroud)
小智 11
如果jest.mock('uuid')
范围错误,可能会出现问题。
这对我来说是正确的:
import * as uuid from 'uuid';
jest.mock('uuid');
describe('utils', () => {
it('test', () => {
jest.spyOn(uuid, 'v4').mockReturnValue('mockedValue')
});
});
Run Code Online (Sandbox Code Playgroud)
这是不正确的:
import * as uuid from 'uuid';
describe('utils', () => {
it('test', () => {
jest.mock('uuid');
jest.spyOn(uuid, 'v4').mockReturnValue('mockedValue')
});
});
Run Code Online (Sandbox Code Playgroud)
这对我有用。就我而言,我只想验证函数是否被调用,而不是对特定值进行断言。
import * as uuid from 'uuid';
jest.mock('uuid');
const uuidSpy = jest.spyOn(uuid, 'v4');
// in a test block
expect(uuidSpy).toHaveBeenCalledTimes(1);
Run Code Online (Sandbox Code Playgroud)
对于我的情况,我使用了这个Github 问题的答案
jest.mock('uuid/v4', () => {
let value = 0;
return () => value++;
});
Run Code Online (Sandbox Code Playgroud)
使用来模拟它mockImplementation
。
import uuid from 'uuid/v4';
jest.mock('uuid/v4');
describe('mock uuid', () => {
it('should return testid }', () => {
uuid.mockImplementation(() => 'testid');
...
});
});
Run Code Online (Sandbox Code Playgroud)
确保您import uuid
正确(使用正确的版本参考,例如v4,v3 ...)
希望以下两个例子对您有所帮助。
假设您需要一个 JS 模块,其唯一职责是生成 UUID。采用 TDD 方法,我们从断言开始,最终发现我们需要一些UUIDGenerator
方法来返回 UUID:
it('should generate UUID', () => {
const myUUID = UUIDGenerator.nextUUID();
expect(myUUID).toEqual('some-short-v4-uuid-0');
});
Run Code Online (Sandbox Code Playgroud)
测试形成UUIDGenerator.ts
以下代码:
import {v4 as uuidv4} from 'uuid';
const UUIDGenerator = {
storeUUID(): string {
return uuidv4();
}
};
export default UUIDGenerator;
Run Code Online (Sandbox Code Playgroud)
现在我们想要模拟UUIDGenerator
对 uuid 模块的依赖。我们可以通过使用jestjs.io 上记录的模块工厂参数调用 jest.mock() 来做到这一点。我们现在可以简单地描述笑话应该如何表现,
jest.mock('uuid',() => ({
v4: () => 'some-short-v4-uuid-0'
}));
describe('UUIDGenerator', () => {
// it block from above
});
Run Code Online (Sandbox Code Playgroud)
您现在应该看到您通过了测试。
uuid.ts
另一种选择是在项目中的某个位置创建一些:
import {v4 as uuidv4} from 'uuid';
export default uuidv4;
Run Code Online (Sandbox Code Playgroud)
并将其导入UUIDGenerator.ts
:
import uuidv4 from '../uuid';
Run Code Online (Sandbox Code Playgroud)
在这种情况下,您应该能够嘲笑您的uuid.ts
. 我将我的目录放在父目录中(相对于UUIDGenerator.ts
),以便您可以看到有关如何在不在同一目录中时找到它的示例。
jest.mock('../uuid',
() => jest.fn(() => '1-234-5678')
);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5319 次 |
最近记录: |