Comments (5)
I tried to create a test myself for the AuthService - SignUp.
What I got so far:
import {Container} from 'typedi';
import express from 'express';
import AuthService from '../../../src/services/auth';
import loaders from '../../../src/loaders';
let db = null;
beforeAll(async (done) => {
const expressApp = express();
const {mongoConnection} = await loaders({expressApp});
db = mongoConnection;
done();
});
afterAll(async (done) => {
const UserModel = Container.get('userModel');
await UserModel.deleteMany({email: "[email protected]"});
db.connection.close(() => done());
});
describe('Auth service', () => {
describe('SignUp', () => {
test('should create user record', async () => {
const userInput = {
firstName: 'User',
lastName: 'Unit Test',
email: '[email protected]',
password: 'test',
};
const UserModel = Container.get('userModel');
const Logger = Container.get('logger');
const authService = new AuthService(UserModel, Logger);
const {user, token} = await authService.SignUp(userInput);
expect(user).toBeDefined();
expect(user._id).toBeDefined();
expect(user.firstName).toBe("User");
expect(user.lastName).toBe("Unit Test");
expect(user.email).toBe("[email protected]");
expect(user.password).not.toBeDefined();
expect(user.salt).not.toBeDefined();
expect(token).toBeDefined();
});
});
describe('SignIn', () => {
it('should be able to login', async () => {
const UserModel = Container.get('userModel');
const Logger = Container.get('logger');
const authService = new AuthService(UserModel, Logger);
const {user, token} = await authService.SignIn('[email protected]', 'test');
expect(user).toBeDefined();
expect(user._id).toBeDefined();
expect(user.firstName).toBe("User");
expect(user.lastName).toBe("Unit Test");
expect(user.email).toBe("[email protected]");
expect(user.password).not.toBeDefined();
expect(user.salt).not.toBeDefined();
expect(token).toBeDefined();
});
it('should throw an error when email was not registered yet', async () => {
const UserModel = Container.get('userModel');
const Logger = Container.get('logger');
const authService = new AuthService(UserModel, Logger);
await expect(authService.SignIn('[email protected]', 'bliepbloep')).rejects.toThrow();
});
})
});
Note: This is when running your own mongoDB instance
Changes in current implementation:
- loaders\index.ts returns mongoConnection
- loaders\mongoose.ts returns connection instead of connection.connection.db
from bulletproof-nodejs.
it would indeed be great to see at least 1 beautiful unit test...
@leanderhoedt few things that could be improved in your sample:
- you should use something like module-alias to avoid relatives path like
../../../src/loaders
- to avoid code duplication, it would be also preferable to have environment set up using jest.setupFiles so that you don't have to define
beforeAll
in each file
from bulletproof-nodejs.
@leanderhoedt the auth service in my code needs some more properties like mailer and dispatcher...
I've tried with Container.get(AuthService)... but then the dependencies wont be injected...
Im unable to add this test :(
from bulletproof-nodejs.
@domsen123 Any luck on the tests?
@syffs how would one use relative paths with the current bulletproof setup? As tests is outside the root dir
from bulletproof-nodejs.
@Nikola-Milovic nope... but didn't check "Dependency Injection in tests #70"
from bulletproof-nodejs.
Related Issues (20)
- How to implement the swagger following this structure? HOT 2
- Email client replacement HOT 1
- Implementation with Mysql/pgsql with typescript HOT 3
- examples for creating new models in mongo HOT 1
- Project structure by feature HOT 2
- add absolute imports? HOT 1
- Where do you add utility functions and constants? HOT 1
- Absolute import "Cannot find module @/*" HOT 5
- Jwt invalid algorithm HOT 2
- Recreate code to be compatible with all os development environment
- Changing a request would require changes in 3 places of the code, is there a better solution? HOT 1
- api status handling
- Better testing project structure/ configuration? HOT 1
- Using a different database for tests HOT 1
- Where store Push Notification Token?
- Refactoring Sub/Pub Layer Poll HOT 1
- Is there same or similar example in js? HOT 1
- Redis client HOT 2
- adapt for mySQL HOT 2
- Update Mongoose for Heroku Deployment
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from bulletproof-nodejs.