Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Can't access plugin inside tests #622

Open
2 tasks done
thales-maciel opened this issue May 8, 2023 · 7 comments
Open
2 tasks done

Can't access plugin inside tests #622

thales-maciel opened this issue May 8, 2023 · 7 comments

Comments

@thales-maciel
Copy link

Prerequisites

  • I have written a descriptive issue title
  • I have searched existing issues to ensure the issue has not already been raised

Issue

I've generated the project using the cli and then I modified my app.ts file so that it looks like this:

import { join } from 'path';
import AutoLoad, {AutoloadPluginOptions} from '@fastify/autoload';
import { FastifyInstance, FastifyPluginAsync } from 'fastify';
import { fastifyPostgres } from '@fastify/postgres';
import fastifySwagger from '@fastify/swagger';
import fastifySwaggerUi from '@fastify/swagger-ui';
import sensible from '@fastify/sensible';
import cors from '@fastify/cors'

export type AppOptions = {} & Partial<AutoloadPluginOptions>;


// Pass --options via CLI arguments in command to enable these options.
const options: AppOptions = {}

const app: FastifyPluginAsync<AppOptions> = async (fastify: FastifyInstance, opts: any): Promise<void> => {
  fastify.register(sensible)

  fastify.register(fastifyPostgres, {
    connectionString: `postgres://${process.env.DB_USER}:${process.env.DB_PASSWORD}@${process.env.DB_HOST}/${process.env.DB_DATABASE}`
  })

  fastify.register(fastifySwagger, { hideUntagged: true })
  fastify.register(fastifySwaggerUi, {
    routePrefix: '/docs',
    uiConfig: { docExpansion: 'list' }
  })

  await fastify.register(cors, {})

  void fastify.register(AutoLoad, {
    dir: join(__dirname, 'routes'),
    options: opts
  })

}

export default app;
export { app, options }

The problem is that when i try to use the pg plugin inside a test I get an error Cannot read properties of undefined (reading 'query'), which makes me believe that the plugin hasn't been registered, but I don't know how to do it.

@fech-dev
Copy link

I have the same problem, cannot access to any "global" plugin.
I notice that the problem is only in the routes tests, while in plugins it works...

@fech-dev
Copy link

fech-dev commented May 17, 2023

I've notice that the build() function does not wrap the app plugin (exported in src/app.ts) with fp() function.
I've tried to apply fp function and I can access all decorators defined from routes tests.
I don't know if this is intentional or not....

@Hornwitser
Copy link

I noticed the same, Wrapping the app into fastify-plugin was just randomly removed in #446 with this change 6dfee4e#diff-d422baf24ac606e8462ae86c1d33235f3c9299defa513b127d36661e3d766e9dL20-R24. @Eomm why was this feature removed while confusingly keeping the comment that is clearly no longer correct?

FWIW I found a viable workaround by adding the following to the end of app.js, and then setting process.env.NODE_ENV = "testing" in test/helpers.js before it calls buildApplication.

if (process.env.NODE_ENV === "testing") {
 // Ensure tests can access all decorators
 app[Symbol.for("skip-override")] = true;
}

@Eomm
Copy link
Member

Eomm commented Aug 29, 2023

If @Hornwitser found the issue, would you like to send a Pull Request to address this issue? Remember to add unit tests.

@Hornwitser
Copy link

I'm not sure how to solve this issue, I'm rather unfamiliar with fastify.

@SumeetHaryani
Copy link

SumeetHaryani commented Sep 20, 2023

@Eomm I would like to work on this issue.

@Eomm
Copy link
Member

Eomm commented Sep 22, 2023

Go for it!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

5 participants