gpt4 book ai didi

node.js - 使用Jasmine的spyOn/andReturn来模拟fs.readFileSync()

转载 作者:太空宇宙 更新时间:2023-11-03 23:30:34 25 4
gpt4 key购买 nike

我正在尝试模拟 fs.readFileSync() 的响应,以便我可以测试我的代码是否在配置文件中返回一些数据。显然我不想测试我的配置文件的内容。

我正在尝试在 (api.js) 中测试此代码

var fs = require('fs');
var config = JSON.parse(fs.readFileSync('configure.json', 'utf8'));

var Api = {
api_key: config['api-key'],
heartbeat_id: config['resource-id'],
};

如果我可以模拟 fs.readFileSync 返回的内容,那么我可以让它返回一些测试值。我的测试如下所示:

var api = require('./api');
var fs = require('fs');

describe('Api object contains correct details', function(){
it('Has an API key of "test API"', function(){
spyOn(fs, 'readFileSync').andReturn(`{
"api-key": "test API",
"resource-id": "Resource ID"
}`);
expect(api.api_key).toBe("test API");
});
});

测试失败并返回我实际配置文件中的值。

最佳答案

api.js 中,您不会导出任何内容以供其他模块使用,因此在测试文件中,您会...

var api = require('./api');

...您正在立即执行 api.js 文件。这意味着,当您的测试在 fs.readFileSync 上创建 spy 时,该函数已被 api.js 使用,并且您的值注入(inject)不会在测试范围。

实现您想要的效果的一种方法是在 api.js 中创建一个函数,根据需要检索配置,并将该函数封装在 module.exports 中堵塞。然后,在您的测试中,需要 api.js 使测试准备好检索配置,因此,如果您在执行检索之前在 fs.readFileSync 上创建 spy ,则该 spy 是一个将被调用的值,您可以对模拟值进行断言。

使用 Jasmine 2.4.1,它的外观如下:

src/api.js

var fs = require('fs');

module.exports = {
getConfig: function() {
var config = JSON.parse(fs.readFileSync('./src/configure.json', 'utf8'));

var Api = {
api_key: config['api-key'],
heartbeat_id: config['resource-id'],
};

return Api;
}
}

规范/api.spec.js

var api = require('../src/api'); // fs.readFileSync hasn't been used yet
var fs = require('fs');

describe('Api object contains correct details', function(){
it('Has an API key of "test API"', function() {
spyOn(fs, 'readFileSync').and.returnValue(`{ // here it's being mocked
"api-key": "test API",
"resource-id": "Resource ID"
}`);
var config = api.getConfig(); // now we are using the mock
expect(config.api_key).toBe("test API");
});
});

关于node.js - 使用Jasmine的spyOn/andReturn来模拟fs.readFileSync(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38736031/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com