Nest.js Fastify 测试 TypeError: app.address is not a function
Posted
技术标签:
【中文标题】Nest.js Fastify 测试 TypeError: app.address is not a function【英文标题】:Nest.js Fastify testing TypeError: app.address is not a function 【发布时间】:2019-03-22 04:43:14 【问题描述】:使用 FastifyAdapter 在 Nest.js 中执行 e2e 测试时,我在执行测试时收到以下错误:
TypeError: app.address is not a function
54 |
55 | return request(app.getHttpServer())
> 56 | .post('/authentication/register')
| ^
57 | .send(payload)
58 | .expect(400);
59 | );
组成如下:
beforeAll(async () =>
const module = await Test.createTestingModule(
imports: [AuthenticationModule],
)
.overrideProvider(UserRepository)
.useValue(userRepository)
.compile();
app = module.createNestApplication(new FastifyAdapter());
await app.init();
);
it(`/POST register - should succeed for valid info`, () =>
const payload = email: 'johnson@gmail.com', password: '1234' ;
return request(app.getHttpServer())
.post('/authentication/register')
.send(payload)
.expect()
.expect(201);
);
不使用 FastifyAdapter 时不会出现此类错误。使用适配器的原因是 fastify-cookie 插件可以通过请求实现 cookie 操作。
请注意,在此演示中,我在 beforeAll 中没有使用 cookie 插件,这本来是:
const fastifyAdapter = new FastifyAdapter();
fastifyAdapter.register(fastifyCookie);
【问题讨论】:
【参考方案1】:我错过了有关 Fastify 的 Nest.js 测试的文档,该文档可以在 Nest.js 的源代码中找到,但在站点文档中没有。在使用 fastify 时,我们需要使用 IT 文档中的测试方法。以下示例工作正常:
beforeAll(async () =>
const fastifyAdapter = new FastifyAdapter();
fastifyAdapter.register(fastifyCookie);
const module = await Test.createTestingModule(
imports: [AuthenticationModule],
)
.overrideProvider(UserRepository)
.useValue(userRepository)
.compile();
app = module.createNestApplication(fastifyAdapter);
await app.init();
);
it(`/POST register - should succeed for valid info`, () =>
return app
.inject(
method: 'POST',
url: '/authentication/register',
payload: email: 'johnson@gmail.com', password: '1234' ,
)
.then(( statusCode, payload ) =>
expect(payload).toEqual('');
expect(statusCode).toEqual(201);
);
);
afterAll(async () =>
await app.close();
);
【讨论】:
以上是关于Nest.js Fastify 测试 TypeError: app.address is not a function的主要内容,如果未能解决你的问题,请参考以下文章
Nest js 是不是以 express js 为核心实现了几乎两倍的基准测试结果。?或者只是为了实现它
带有 NEST.JS 的 newrelic/apollo-server-plugin
如何在单元测试 Nest.js 中测试抛出新的 HttpException