为什么使用java script fs.readFileSync没有被嘲笑?



我有一个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

最新更新