如何在Jest中模拟JSON文件

问题描述 投票:0回答:1

我正在使用Jest测试我的API,并且在运行测试时,由于我的API results.json中的以下行(我不想发生这种情况),我的JSON文件app.js被写入:

fs.writeFile('results.json', JSON.stringify(json), (err, result) => {
    if (err) console.log('error', err);
});

这是我的Jest文件的外观:

const request = require('supertest');
const app = require('./app');


// thanks to Nico Tejera at https://stackoverflow.com/questions/1714786/query-string-encoding-of-a-javascript-object
function serialise(obj){
    return Object.keys(obj).map(k => `${encodeURIComponent(k)}=${encodeURIComponent(obj[k])}`).join('&');
}


describe('Test /addtask', () => {
    test('POST /addtask Successfully redirects if newDate and newTask filled in correctly', () => {
        const params = {
                    newTask: 'Example',
                    newDate: '2020-03-11'
        };
        return request(app)
            .post('/addtask')
            .send(serialise(params))
            .expect(301);
    });
});

[我尝试创建JSON文件的模型并将其放置在describe语句之外,以防止将实际的results.json文件写入:

jest.mock('./results.json', () => ({ name: 'preset1', JSONtask: [], JSONcomplete: [] }, { name: 'preset2', JSONtask: [], JSONcomplete: [] }));

但是这不会改变任何东西。有人有什么建议吗?

我已经看到了类似问题的其他解决方案,但它们没有提供我正在寻找的答案。

javascript json jest supertest
1个回答
0
投票

您想要做的是将对fs.writeFile的依赖隔离到例如ResultsWriter之类的东西中。然后可以为您的测试目的注入和模拟该依赖性。

昨天我在how to unit test a class extending an abstract class reading environment variables下针对NestJS的一个非常相似的案例编写了一个详尽的示例,希望您可以适应您的需求。

© www.soinside.com 2019 - 2024. All rights reserved.