gpt4 book ai didi

node.js - 模拟 fs.readdir 用于测试

转载 作者:搜寻专家 更新时间:2023-10-31 22:32:26 26 4
gpt4 key购买 nike

我正在尝试为我的测试模拟函数 fs.readdir

一开始我尝试使用 sinon 因为这是一个非常好的框架,但是没有用。

stub(fs, 'readdir').yieldsTo('callback', { error: null, files: ['index.md', 'page1.md', 'page2.md'] });

我的第二次尝试是用一个 self 替换的函数来模拟这个函数。但它也不起作用。

beforeEach(function () {
original = fs.readdir;

fs.readdir = function (path, callback) {
callback(null, ['/content/index.md', '/content/page1.md', '/content/page2.md']);
};
});

afterEach(function () {
fs.readdir = original;
});

谁能告诉我为什么两者都不起作用?谢谢!


更新 - 这也行不通:

  sandbox.stub(fs, 'readdir', function (path, callback) {
callback(null, ['index.md', 'page1.md', 'page2.md']);
});

更新2:

我最后一次模拟 readdir 函数的尝试成功了,当时我试图在我的测试中直接调用该函数。但当我在另一个模块中调用模拟函数时不会。

最佳答案

我找到了问题的原因。我在我的测试类中创建了模拟,试图用 supertest 测试我的 rest api。问题是测试是在另一个进程中执行的,就像我的网络服务器运行的进程一样。我已经在我的测试类中创建了 express-app,测试现在是绿色的。

这是测试

describe('When user wants to list all existing pages', function () {
var sandbox;
var app = express();

beforeEach(function (done) {
sandbox = sinon.sandbox.create(); // @deprecated — Since 5.0, use sinon.createSandbox instead

app.get('/api/pages', pagesRoute);
done();
});

afterEach(function (done) {
sandbox.restore();
done();
});

it('should return a list of the pages with their titles except the index page', function (done) {
sandbox.stub(fs, 'readdir', function (path, callback) {
callback(null, ['index.md', 'page1.md', 'page2.md']);
});

request(app).get('/api/pages')
.expect('Content-Type', "application/json")
.expect(200)
.end(function (err, res) {
if (err) {
return done(err);
}

var pages = res.body;

should.exists(pages);

pages.length.should.equal(2);

done();
});
});
});

关于node.js - 模拟 fs.readdir 用于测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18044737/

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