我有一个fs。readFileSync函数,我需要使用jest模拟。我试过下面的代码。
我要测试的原始文件
const fs = require('fs');
const read_file = (path) => {
try {
const data = fs.readFileSync(path, 'utf8');
return data;
} catch (err) {
console.error('Error in read_file', err);
throw err;
}
};
const getSecret = secretName => {
try {
return read_file(`/etc/secrets/${secretName}.txt`);
} catch (err){
throw err;
}
};
const secretConfig = {
kafka_keystore_password: getSecret('kafka_keystore_password')
};
module.exports = secretConfig;
这是我的测试用例
const secret = require('./secret');
let fs = require('fs')
jest.mock('fs');
describe('secret read files', () => {
afterEach(jest.restoreAllMocks);
it('should read secret from file', () => {
//fs.readFileSync.mockReturnValue("randomPrivateKey");
fs.readFileSync.mockResolvedValue("randomPrivateKey")
const secretMessage = secret.kafka_keystore_password;
//expect(fs.readFileSync).toHaveBeenCalled();
expect(secretMessage).toEqual('randomPrivateKey');
})
})
describe('getSecretsFromFile', () => {
const secret = 'secret';
const secrets = { mySecret: secret };
afterEach(jest.restoreAllMocks);
it('returns secrets if file is present', () => {
fs.existsSync.mockReturnValue(true);
fs.readFileSync.mockReturnValue('randomPrivateKey');
const secretMessage = secret.kafka_keystore_password;
expect(secretMessage).toEqual('randomPrivateKey');
});
});
,我得到以下错误:
FAIL src/config/secret.test.js●secret read files›应该读取Secret from file
expect(received).toEqual(expected) // deep equality Expected: "randomPrivateKey" Received: undefined 15 | const secretMessage = secret.kafka_keystore_password; 16 | //expect(fs.readFileSync).toHaveBeenCalled(); > 17 | expect(secretMessage).toEqual('randomPrivateKey'); | ^ 18 | 19 | }) 20 | at Object.<anonymous> (src/config/secret.test.js:17:27)
●getSecretsFromFile›如果文件存在,则返回秘密
expect(received).toEqual(expected) // deep equality Expected: "randomPrivateKey" Received: undefined 32 | 33 | const secretMessage = secret.kafka_keystore_password; > 34 | expect(secretMessage).toEqual('randomPrivateKey'); | ^ 35 | }); 36 | }); 37 | at Object.<anonymous> (src/config/secret.test.js:34:29)
帮我解决这个问题。
try:
const fs = {
readFileSync: jest.fn(() => ({ message: 'Test'}))
}
模拟fs readFileSync消息。
但是我不知道这个测试是怎么通过的因为你返回的值是&;Test">
但检查randomPrivateKey
expect(secretMessage).toEqual('randomPrivateKey');
没有看到代码里面发生了什么,很难说,但我假设你可能想把那行改为:
expect(secretMessage).toEqual('test');
由于test
是模拟的值,因此可以从模拟返回randomPrivateKey
。
我不得不在这里做很多假设,因为我不知道计算secret.kafka_keystore_password
。我假设它只是返回fs.readFileSync
返回的内容。7