我使用实验室为 HapiJS 编写了一个单元测试
beforeEach(async ({ context }) => {
context.server = new Hapi.Server();
await context.server.register(Inert);
});
test('/ rootPath is served', async ({ context }) => {
await context.server.register({
plugin: require('../server/statics'),
options: { rootPath }
});
const res = await context.server.inject({
method: 'GET',
url: '/'
});
expect(res.statusCode).to.equal(200);
});
当测试因此错误而失败时,我感到很惊讶。
Method Set.prototype.add called on incompatible receiver #<Set>
at Set.add (<anonymous>)
at module.exports.internals.Core.registerServer (/home/xxxx/node_modules/hapi/lib/core.js:217:24)
问题似乎在于将服务器添加到instances
.
// /home/xxx/node_modules/hapi/lib/core.js
registerServer(server) {
if (!this.root) {
this.root = server;
this._defaultRoutes();
}
this.instances.add(server); // <-- line 217
}
这被宣布为一个集合。
this.dependencies = [];
// Plugin dependencies
this.events = new Podium(internals.events);
this.heavy = new Heavy(this.settings.load);
this.instances = new Set(); // <-- line 68
我想知道为什么会发生此错误,以及我是否以错误的方式使用上下文。我当然可以在模块范围内使用变量作为解决方法,但我认为创建上下文帮助程序是为了避免这样做。