Nest: [BUG] static fields in MiddlewaresModule are not cleaned out properly

Created on 21 Nov 2017  路  8Comments  路  Source: nestjs/nest

I'm submitting a...


[ ] Regression 
[x] Bug report
[ ] Feature request
[ ] Documentation issue or request
[ ] Support request => Please do not submit support request here, instead post your question on Stack Overflow.

Current behavior


When executing multiple e2e tests which are built based upon the example in the documentation, one stumbles upon the issue that middlewares of one test get carried over to another due to the fact that middlewares are stored as static variables in MiddlewaresModule.

Expected behavior


The expected behaviour would be that Nest has no static state so that middlewares of one test do not get carried over to another that is run within the same process.

Minimal reproduction of the problem with instructions


Have module A create a middleware a and apply it to all routes of the application. Write an e2e test according to the documentation using the A module. Create a module B, write another e2e test according to the documentation WITHOUT adding module A to the TestingModule. The middleware a is still applied to module B in the second test.

What is the motivation / use case for changing the behavior?

I have an Auth module which uses passport/JWT to authenticate users and grant access to the application. The corresponding middleware is used for all routes but the log in route. Within the tests for other modules I do not want to use this middleware, hence I do not include the Auth Module when building the Testing Module. However, when the Auth tests are run first, the middleware is still stuck in the static property of MiddlewaresModule and all my other tests fail with 401 UNAUTHORIZED.

Environment


Nest version: ~4.2.0

type

Most helpful comment

Hi @NilsHaldenwang,
Please, update to 4.3.3. Sorry for your effort and let me know whether it's working now 馃檪

All 8 comments

Hi @NilsHaldenwang,
Thanks for reporting. A bug should disappear with 4.3.0 update. Let me know if you would still have some troubles with it 馃檪

Hey there!

Thank you for your quick reply! I updated the version to 4.3.0, nothing else changed. Now I get the following error when trying to run tests:

$ NODE_ENV=test mocha src/**/*.e2e.ts --require ts-node/register --reporter spec

/Users/username/projects/xxx/app/packages/backend/node_modules/@nestjs/core/exceptions/exceptions-handler.js:49
ExceptionsHandler.logger = new common_1.Logger(ExceptionsHandler.name);
                           ^
TypeError: common_1.Logger is not a constructor
    at Object.<anonymous> (/Users/username/projects/xxx/app/packages/backend/node_modules/@nestjs/core/exceptions/exceptions-handler.js:49:28)
    at Module._compile (module.js:624:30)
    at Module._extensions..js (module.js:635:10)
    at Object.require.extensions.(anonymous function) [as .js] (/Users/username/projects/xxx/app/packages/backend/node_modules/ts-node/src/index.ts:384:14)
    at Module.load (module.js:545:32)
    at tryModuleLoad (module.js:508:12)
    at Function.Module._load (module.js:500:3)
    at Module.require (module.js:568:17)
    at require (internal/module.js:11:18)
    at Object.<anonymous> (/Users/username/projects/xxx/app/packages/backend/node_modules/@nestjs/core/router/router-exception-filters.js:4:30)
    at Module._compile (module.js:624:30)
    at Module._extensions..js (module.js:635:10)
    at Object.require.extensions.(anonymous function) [as .js] (/Users/username/projects/xxx/app/packages/backend/node_modules/ts-node/src/index.ts:384:14)
    at Module.load (module.js:545:32)
    at tryModuleLoad (module.js:508:12)
    at Function.Module._load (module.js:500:3)
    at Module.require (module.js:568:17)
    at require (internal/module.js:11:18)
    at Object.<anonymous> (/Users/username/projects/xxx/app/packages/backend/node_modules/@nestjs/core/middlewares/middlewares-module.js:19:36)
    at Module._compile (module.js:624:30)
    at Module._extensions..js (module.js:635:10)
    at Object.require.extensions.(anonymous function) [as .js] (/Users/username/projects/xxx/app/packages/backend/node_modules/ts-node/src/index.ts:384:14)
    at Module.load (module.js:545:32)
    at tryModuleLoad (module.js:508:12)
    at Function.Module._load (module.js:500:3)
    at Module.require (module.js:568:17)
    at require (internal/module.js:11:18)
    at Object.<anonymous> (/Users/username/projects/xxx/app/packages/backend/node_modules/@nestjs/core/nest-application.js:20:30)
    at Module._compile (module.js:624:30)
    at Module._extensions..js (module.js:635:10)
    at Object.require.extensions.(anonymous function) [as .js] (/Users/username/projects/xxx/app/packages/backend/node_modules/ts-node/src/index.ts:384:14)
    at Module.load (module.js:545:32)
    at tryModuleLoad (module.js:508:12)
    at Function.Module._load (module.js:500:3)
    at Module.require (module.js:568:17)
    at require (internal/module.js:11:18)
    at Object.<anonymous> (/Users/username/projects/xxx/app/packages/backend/node_modules/@nestjs/core/nest-factory.js:18:28)
    at Module._compile (module.js:624:30)
    at Module._extensions..js (module.js:635:10)
    at Object.require.extensions.(anonymous function) [as .js] (/Users/username/projects/xxx/app/packages/backend/node_modules/ts-node/src/index.ts:384:14)
    at Module.load (module.js:545:32)
    at tryModuleLoad (module.js:508:12)
    at Function.Module._load (module.js:500:3)
    at Module.require (module.js:568:17)
    at require (internal/module.js:11:18)
    at Object.<anonymous> (/Users/username/projects/xxx/app/packages/backend/node_modules/@nestjs/core/index.js:19:10)
    at Module._compile (module.js:624:30)
    at Module._extensions..js (module.js:635:10)
    at Object.require.extensions.(anonymous function) [as .js] (/Users/username/projects/xxx/app/packages/backend/node_modules/ts-node/src/index.ts:384:14)
    at Module.load (module.js:545:32)
    at tryModuleLoad (module.js:508:12)
    at Function.Module._load (module.js:500:3)
    at Module.require (module.js:568:17)
    at require (internal/module.js:11:18)
    at Object.<anonymous> (/Users/username/projects/xxx/app/packages/backend/node_modules/@nestjs/common/pipes/validation.pipe.js:17:16)
    at Module._compile (module.js:624:30)
    at Module._extensions..js (module.js:635:10)
    at Object.require.extensions.(anonymous function) [as .js] (/Users/username/projects/xxx/app/packages/backend/node_modules/ts-node/src/index.ts:384:14)
    at Module.load (module.js:545:32)
    at tryModuleLoad (module.js:508:12)
    at Function.Module._load (module.js:500:3)
    at Module.require (module.js:568:17)
    at require (internal/module.js:11:18)
    at Object.<anonymous> (/Users/username/projects/xxx/app/packages/backend/node_modules/@nestjs/common/pipes/index.js:6:10)
    at Module._compile (module.js:624:30)
    at Module._extensions..js (module.js:635:10)
    at Object.require.extensions.(anonymous function) [as .js] (/Users/username/projects/xxx/app/packages/backend/node_modules/ts-node/src/index.ts:384:14)
    at Module.load (module.js:545:32)
    at tryModuleLoad (module.js:508:12)
    at Function.Module._load (module.js:500:3)
    at Module.require (module.js:568:17)
    at require (internal/module.js:11:18)
    at Object.<anonymous> (/Users/username/projects/xxx/app/packages/backend/node_modules/@nestjs/common/index.js:14:10)
    at Module._compile (module.js:624:30)
    at Module._extensions..js (module.js:635:10)
    at Object.require.extensions.(anonymous function) [as .js] (/Users/username/projects/xxx/app/packages/backend/node_modules/ts-node/src/index.ts:384:14)
    at Module.load (module.js:545:32)
    at tryModuleLoad (module.js:508:12)
    at Function.Module._load (module.js:500:3)
    at Module.require (module.js:568:17)
    at require (internal/module.js:11:18)
    at Object.<anonymous> (/Users/username/projects/xxx/app/packages/backend/src/app/e2e/auth.e2e.ts:1:1)
    at Module._compile (module.js:624:30)
    at Module.m._compile (/Users/username/projects/xxx/app/packages/backend/node_modules/ts-node/src/index.ts:392:23)
    at Module._extensions..js (module.js:635:10)
    at Object.require.extensions.(anonymous function) [as .ts] (/Users/username/projects/xxx/app/packages/backend/node_modules/ts-node/src/index.ts:395:12)
    at Module.load (module.js:545:32)
    at tryModuleLoad (module.js:508:12)
    at Function.Module._load (module.js:500:3)
    at Module.require (module.js:568:17)
    at require (internal/module.js:11:18)
    at /Users/username/projects/xxx/app/packages/backend/node_modules/mocha/lib/mocha.js:231:27
    at Array.forEach (<anonymous>)
    at Mocha.loadFiles (/Users/username/projects/xxx/app/packages/backend/node_modules/mocha/lib/mocha.js:228:14)
    at Mocha.run (/Users/username/projects/xxx/app/packages/backend/node_modules/mocha/lib/mocha.js:514:10)
    at Object.<anonymous> (/Users/username/projects/xxx/app/packages/backend/node_modules/mocha/bin/_mocha:480:18)
    at Module._compile (module.js:624:30)
    at Object.Module._extensions..js (module.js:635:10)
    at Module.load (module.js:545:32)
    at tryModuleLoad (module.js:508:12)
    at Function.Module._load (module.js:500:3)
    at Function.Module.runMain (module.js:665:10)
    at startup (bootstrap_node.js:187:16)
    at bootstrap_node.js:607:3
error Command failed with exit code 1.

Not sure if this is directly related. When starting the server the problem does not come up, only when running tests.

I suppose it's something with the dependencies between packages. Please, update to 4.3.1 and let me know 馃檪

After updating to 4.3.1 the error (now only for unit tests, e2e test are working) is:

$ NODE_ENV=test mocha src/**/*.spec.ts --require ts-node/register --reporter spec

/Users/username/projects/xxx/app/packages/backend/node_modules/@nestjs/core/nest-factory.js:27
        this.instanceLoader = new instance_loader_1.InstanceLoader(this.container);
                              ^
TypeError: instance_loader_1.InstanceLoader is not a constructor
    at new NestFactoryStatic (/Users/username/projects/xxx/app/packages/backend/node_modules/@nestjs/core/nest-factory.js:27:31)
    at Object.<anonymous> (/Users/username/projects/xxx/app/packages/backend/node_modules/@nestjs/core/nest-factory.js:102:23)
    at Module._compile (module.js:624:30)
    at Module._extensions..js (module.js:635:10)
    at Object.require.extensions.(anonymous function) [as .js] (/Users/username/projects/xxx/app/packages/backend/node_modules/ts-node/src/index.ts:384:14)
    at Module.load (module.js:545:32)
    at tryModuleLoad (module.js:508:12)
    at Function.Module._load (module.js:500:3)
    at Module.require (module.js:568:17)
    at require (internal/module.js:11:18)
    at Object.<anonymous> (/Users/username/projects/xxx/app/packages/backend/node_modules/@nestjs/core/index.js:19:10)
    at Module._compile (module.js:624:30)
    at Module._extensions..js (module.js:635:10)
    at Object.require.extensions.(anonymous function) [as .js] (/Users/username/projects/xxx/app/packages/backend/node_modules/ts-node/src/index.ts:384:14)
    at Module.load (module.js:545:32)
    at tryModuleLoad (module.js:508:12)
    at Function.Module._load (module.js:500:3)
    at Module.require (module.js:568:17)
    at require (internal/module.js:11:18)
    at Object.<anonymous> (/Users/username/projects/xxx/app/packages/backend/node_modules/@nestjs/common/pipes/validation.pipe.js:17:16)
    at Module._compile (module.js:624:30)
    at Module._extensions..js (module.js:635:10)
    at Object.require.extensions.(anonymous function) [as .js] (/Users/username/projects/xxx/app/packages/backend/node_modules/ts-node/src/index.ts:384:14)
    at Module.load (module.js:545:32)
    at tryModuleLoad (module.js:508:12)
    at Function.Module._load (module.js:500:3)
    at Module.require (module.js:568:17)
    at require (internal/module.js:11:18)
    at Object.<anonymous> (/Users/username/projects/xxx/app/packages/backend/node_modules/@nestjs/common/index.js:15:10)
    at Module._compile (module.js:624:30)
    at Module._extensions..js (module.js:635:10)
    at Object.require.extensions.(anonymous function) [as .js] (/Users/username/projects/xxx/app/packages/backend/node_modules/ts-node/src/index.ts:384:14)
    at Module.load (module.js:545:32)
    at tryModuleLoad (module.js:508:12)
    at Function.Module._load (module.js:500:3)
    at Module.require (module.js:568:17)
    at require (internal/module.js:11:18)
    at Object.<anonymous> (/Users/username/projects/xxx/app/packages/backend/node_modules/@nestjs/core/injector/instance-loader.js:12:18)
    at Module._compile (module.js:624:30)
    at Module._extensions..js (module.js:635:10)
    at Object.require.extensions.(anonymous function) [as .js] (/Users/username/projects/xxx/app/packages/backend/node_modules/ts-node/src/index.ts:384:14)
    at Module.load (module.js:545:32)
    at tryModuleLoad (module.js:508:12)
    at Function.Module._load (module.js:500:3)
    at Module.require (module.js:568:17)
    at require (internal/module.js:11:18)
    at Object.<anonymous> (/Users/username/projects/xxx/app/packages/backend/node_modules/@nestjs/testing/testing-module.builder.js:11:27)
    at Module._compile (module.js:624:30)
    at Module._extensions..js (module.js:635:10)
    at Object.require.extensions.(anonymous function) [as .js] (/Users/username/projects/xxx/app/packages/backend/node_modules/ts-node/src/index.ts:384:14)
    at Module.load (module.js:545:32)
    at tryModuleLoad (module.js:508:12)
    at Function.Module._load (module.js:500:3)
    at Module.require (module.js:568:17)
    at require (internal/module.js:11:18)
    at Object.<anonymous> (/Users/username/projects/xxx/app/packages/backend/node_modules/@nestjs/testing/test.js:6:34)
    at Module._compile (module.js:624:30)
    at Module._extensions..js (module.js:635:10)
    at Object.require.extensions.(anonymous function) [as .js] (/Users/username/projects/xxx/app/packages/backend/node_modules/ts-node/src/index.ts:384:14)
    at Module.load (module.js:545:32)
    at tryModuleLoad (module.js:508:12)
    at Function.Module._load (module.js:500:3)
    at Module.require (module.js:568:17)
    at require (internal/module.js:11:18)
    at Object.<anonymous> (/Users/username/projects/xxx/app/packages/backend/node_modules/@nestjs/testing/index.js:12:10)
    at Module._compile (module.js:624:30)
    at Module._extensions..js (module.js:635:10)
    at Object.require.extensions.(anonymous function) [as .js] (/Users/username/projects/xxx/app/packages/backend/node_modules/ts-node/src/index.ts:384:14)
    at Module.load (module.js:545:32)
    at tryModuleLoad (module.js:508:12)
    at Function.Module._load (module.js:500:3)
    at Module.require (module.js:568:17)
    at require (internal/module.js:11:18)
    at Object.<anonymous> (/Users/username/projects/xxx/app/packages/backend/src/app/controllers/HelloWorld/HelloWorld.controller.spec.ts:1:1)
    at Module._compile (module.js:624:30)
    at Module.m._compile (/Users/username/projects/xxx/app/packages/backend/node_modules/ts-node/src/index.ts:392:23)
    at Module._extensions..js (module.js:635:10)
    at Object.require.extensions.(anonymous function) [as .ts] (/Users/username/projects/xxx/app/packages/backend/node_modules/ts-node/src/index.ts:395:12)
    at Module.load (module.js:545:32)
    at tryModuleLoad (module.js:508:12)
    at Function.Module._load (module.js:500:3)
    at Module.require (module.js:568:17)
    at require (internal/module.js:11:18)
    at /Users/username/projects/xxx/app/packages/backend/node_modules/mocha/lib/mocha.js:231:27
    at Array.forEach (<anonymous>)
    at Mocha.loadFiles (/Users/username/projects/xxx/app/packages/backend/node_modules/mocha/lib/mocha.js:228:14)
    at Mocha.run (/Users/username/projects/xxx/app/packages/backend/node_modules/mocha/lib/mocha.js:514:10)
    at Object.<anonymous> (/Users/username/projects/xxx/app/packages/backend/node_modules/mocha/bin/_mocha:480:18)
    at Module._compile (module.js:624:30)
    at Object.Module._extensions..js (module.js:635:10)
    at Module.load (module.js:545:32)
    at tryModuleLoad (module.js:508:12)
    at Function.Module._load (module.js:500:3)
    at Function.Module.runMain (module.js:665:10)
    at startup (bootstrap_node.js:187:16)
    at bootstrap_node.js:607:3
error Command failed with exit code 1.

Hi @NilsHaldenwang,
Please, update to 4.3.3. Sorry for your effort and let me know whether it's working now 馃檪

Thank you very much for your quick response! Everything works now with the update to version 4.3.3.

Great 馃帀

This thread has been automatically locked since there has not been any recent activity after it was closed. Please open a new issue for related bugs.

Was this page helpful?
0 / 5 - 0 ratings

Related issues

weeco picture weeco  路  28Comments

j picture j  路  32Comments

galkowskit picture galkowskit  路  45Comments

hypeofpipe picture hypeofpipe  路  27Comments

BrunnerLivio picture BrunnerLivio  路  40Comments