Skip to content

Instantly share code, notes, and snippets.

@mjclemente
Forked from firxworx/app.e2e-spec.ts
Created August 4, 2020 21:30
Show Gist options
  • Star 11 You must be signed in to star a gist
  • Fork 3 You must be signed in to fork a gist
  • Save mjclemente/e13995c29376f0924eb2eacf98eaa5a6 to your computer and use it in GitHub Desktop.
Save mjclemente/e13995c29376f0924eb2eacf98eaa5a6 to your computer and use it in GitHub Desktop.
NestJS Integration/E2E Testing Example with TypeORM, Postgres, JWT
import { Test, TestingModule } from '@nestjs/testing'
import { INestApplication, LoggerService } from '@nestjs/common'
import * as request from 'supertest'
import { AppModule } from './../src/app.module'
class TestLogger implements LoggerService {
log(message: string) {}
error(message: string, trace: string) {}
warn(message: string) {}
debug(message: string) {}
verbose(message: string) {}
}
describe('AppController (e2e)', () => {
let app: INestApplication
beforeAll(async () => {
const moduleFixture: TestingModule = await Test.createTestingModule({
imports: [AppModule],
}).compile()
app = moduleFixture.createNestApplication()
app.useLogger(new TestLogger())
await app.init()
// tip: access the database connection via
// const connection = app.get(Connection)
// const a = connection.manager
})
afterAll(async () => {
await Promise.all([
app.close(),
])
})
it('/ (GET)', () => {
return request(app.getHttpServer())
.get('/')
.expect(200)
.expect('Hello World!')
})
describe('Authentication', () => {
let jwtToken: string
describe('AuthModule', () => {
// assume test data includes user test@example.com with password 'password'
it('authenticates user with valid credentials and provides a jwt token', async () => {
const response = await request(app.getHttpServer())
.post('/auth/login')
.send({ email: 'test@example.com', password: 'password' })
.expect(200)
// set jwt token for use in subsequent tests
jwtToken = response.body.accessToken
expect(jwtToken).toMatch(/^[A-Za-z0-9-_=]+\.[A-Za-z0-9-_=]+\.?[A-Za-z0-9-_.+/=]*$/) // jwt regex
})
it('fails to authenticate user with an incorrect password', async () => {
const response = await request(app.getHttpServer())
.post('/auth/login')
.send({ email: 'test@example.com', password: 'wrong' })
.expect(401)
expect(response.body.accessToken).not.toBeDefined()
})
// assume test data does not include a nobody@example.com user
it('fails to authenticate user that does not exist', async () => {
const response = await request(app.getHttpServer())
.post('/auth/login')
.send({ email: 'nobody@example.com', password: 'test' })
.expect(401)
expect(response.body.accessToken).not.toBeDefined()
})
})
describe('Protected', () => {
it('gets protected resource with jwt authenticated request', async () => {
const response = await request(app.getHttpServer())
.get('/protected')
.set('Authorization', `Bearer ${jwtToken}`)
.expect(200)
const data = response.body.data
// add assertions that reflect your test data
// expect(data).toHaveLength(3)
})
})
})
})
@mjclemente
Copy link
Author

I forked this from another gist - https://gist.github.com/firxworx/575f019c5ebd67976da164f48c2f4375

Best to check with the original. Sorry I can't be of more help.

@indu5332
Copy link

thank you sir , problem got solved

@lazarusmwangim
Copy link

Change line 9 src to the relative directory... e.g ../../

@Pulkit-Simform
Copy link

Pulkit-Simform commented Jun 14, 2023

Change line 9 src to the relative directory... e.g ../../

For Future reference

solution
In package.json should update

"jest":{
//
    "moduleNameMapper": {
          "^src/(.*)$": "<rootDir>/../src/$1"
      }
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment