为什么开玩笑地嘲笑函数 returns 未定义?
why jest mocked function returns undefined?
我有一个要测试的 js 文件。
'use strict';
const KafkaJS = require('kafkajs');
const { Kafka, logLevel } = require('kafkajs');
const kafkaLogger = require('./kafkaLogger');
const { kafkaBrokers } = require('../config/kafkaConfig');
const secretConfig = require('../config/secret');
const { getEnvironment }= require('../utils/getEnvironment');
const fs = require('fs');
const kafkaClient = new Kafka(
{
brokers: kafkaBrokers[getEnvironment()],
clientId: 'api',
connectionTimeout: 20000,
logCreator: kafkaLogger,
logLevel: logLevel.DEBUG,
retry: {
initialRetryTime: 100,
retries: 8
},
ssl: {
rejectUnauthorized: false,
ca: [fs.readFileSync('/etc/secrets/RootCA-SHA256.pem', 'utf-8')],
key: [fs.readFileSync('/etc/secrets/keystore.pem', 'utf-8')],
cert: [fs.readFileSync('/etc/secrets/trust.pem', 'utf-8')],
passphrase: secretConfig.kafka_keystore_password
}
},
);
module.exports = kafkaClient;
我正在编写测试用例作为..
const KafkaJS = require('kafkajs');
const { Kafka, logLevel } = require('kafkajs');
const kafkaLogger = require('./kafkaLogger');
const { getEnvironment } = require('../utils/getEnvironment');
const fs = require('fs');
jest.mock('../utils/getEnvironment', () => {
return {
getEnvironment: jest.fn().mockResolvedValue('testBrokers'),
};
});
getEnvironment.mockResolvedValue('testBrokers')
jest.mock('fs')
fs.readFileSync.mockReturnValue("cert")
process.env.ENVIRONMENT = 'dev';
jest.mock('kafkajs');
const mockProducer = jest.fn();
const mockConsumer = jest.fn();
KafkaJS.Kafka.mockImplementation((options) => {
expect(options).toEqual({
brokers: 'testBrokers',
clientId: 'api',
connectionTimeout: 20000,
logCreator: kafkaLogger,
logLevel: logLevel.DEBUG,
retry: {
initialRetryTime: 100,
retries: 8
},
ssl: {
rejectUnauthorized: false,
ca: ["cert"],
key: ["cert"],
cert: ["cert"],
passphrase: "cert"
}
});
return { producer: mockProducer, consumer: mockConsumer };
});
const kafkaClient = require('./client');
describe('kafka client', () => {
it('should return a client', async () => {
expect(kafkaClient).toEqual({
producer: mockProducer,
consumer: mockConsumer,
});
});
});
我开玩笑地收到以下错误..
FAIL src/kafka/client.test.js
● Test suite failed to run
expect(received).toEqual(expected) // deep equality
- Expected - 1
+ Received + 1
@@ -1,7 +1,7 @@
Object {
- "brokers": "testBrokers",
+ "brokers": undefined,
- 请帮助我理解为什么我不能模拟 getEnvironment 函数
正确吗?
- 模拟默认导入有什么区别吗
函数并模拟命名的导入函数 ?
- 通过示例帮助我理解差异。
please help me understand why i cannot mock getEnvironment function
properly ?
在测试文件中,将 getEnvironment.mockResolvedValue('testBrokers')
替换为 getEnvironment.mockReturnValue('testBrokers')
,因为前者用于模拟异步函数。
参考official documentation了解更多详情
确保模拟 kafkaBrokers 查找“testBrokers”以及预期结果
brokers: kafkaBrokers[getEnvironment()]
is there any difference in mocking a default imported function and
mocking a named imported function ?
理想情况下,嘲笑他们没有区别。请参阅 this 有趣的笑话功能以获得更多见解。
我有一个要测试的 js 文件。
'use strict';
const KafkaJS = require('kafkajs');
const { Kafka, logLevel } = require('kafkajs');
const kafkaLogger = require('./kafkaLogger');
const { kafkaBrokers } = require('../config/kafkaConfig');
const secretConfig = require('../config/secret');
const { getEnvironment }= require('../utils/getEnvironment');
const fs = require('fs');
const kafkaClient = new Kafka(
{
brokers: kafkaBrokers[getEnvironment()],
clientId: 'api',
connectionTimeout: 20000,
logCreator: kafkaLogger,
logLevel: logLevel.DEBUG,
retry: {
initialRetryTime: 100,
retries: 8
},
ssl: {
rejectUnauthorized: false,
ca: [fs.readFileSync('/etc/secrets/RootCA-SHA256.pem', 'utf-8')],
key: [fs.readFileSync('/etc/secrets/keystore.pem', 'utf-8')],
cert: [fs.readFileSync('/etc/secrets/trust.pem', 'utf-8')],
passphrase: secretConfig.kafka_keystore_password
}
},
);
module.exports = kafkaClient;
我正在编写测试用例作为..
const KafkaJS = require('kafkajs');
const { Kafka, logLevel } = require('kafkajs');
const kafkaLogger = require('./kafkaLogger');
const { getEnvironment } = require('../utils/getEnvironment');
const fs = require('fs');
jest.mock('../utils/getEnvironment', () => {
return {
getEnvironment: jest.fn().mockResolvedValue('testBrokers'),
};
});
getEnvironment.mockResolvedValue('testBrokers')
jest.mock('fs')
fs.readFileSync.mockReturnValue("cert")
process.env.ENVIRONMENT = 'dev';
jest.mock('kafkajs');
const mockProducer = jest.fn();
const mockConsumer = jest.fn();
KafkaJS.Kafka.mockImplementation((options) => {
expect(options).toEqual({
brokers: 'testBrokers',
clientId: 'api',
connectionTimeout: 20000,
logCreator: kafkaLogger,
logLevel: logLevel.DEBUG,
retry: {
initialRetryTime: 100,
retries: 8
},
ssl: {
rejectUnauthorized: false,
ca: ["cert"],
key: ["cert"],
cert: ["cert"],
passphrase: "cert"
}
});
return { producer: mockProducer, consumer: mockConsumer };
});
const kafkaClient = require('./client');
describe('kafka client', () => {
it('should return a client', async () => {
expect(kafkaClient).toEqual({
producer: mockProducer,
consumer: mockConsumer,
});
});
});
我开玩笑地收到以下错误..
FAIL src/kafka/client.test.js
● Test suite failed to run
expect(received).toEqual(expected) // deep equality
- Expected - 1
+ Received + 1
@@ -1,7 +1,7 @@
Object {
- "brokers": "testBrokers",
+ "brokers": undefined,
- 请帮助我理解为什么我不能模拟 getEnvironment 函数 正确吗?
- 模拟默认导入有什么区别吗 函数并模拟命名的导入函数 ?
- 通过示例帮助我理解差异。
please help me understand why i cannot mock getEnvironment function properly ?
在测试文件中,将 getEnvironment.mockResolvedValue('testBrokers')
替换为 getEnvironment.mockReturnValue('testBrokers')
,因为前者用于模拟异步函数。
参考official documentation了解更多详情
确保模拟 kafkaBrokers 查找“testBrokers”以及预期结果
brokers: kafkaBrokers[getEnvironment()]
is there any difference in mocking a default imported function and mocking a named imported function ?
理想情况下,嘲笑他们没有区别。请参阅 this 有趣的笑话功能以获得更多见解。