I have a repository function on my repository layer. I use sequelize as data access. I will write tests for my function.
Here is the logic I want in English:
- My function should save a user to database by using the email and password
- My function should return an object representation of my created user.
For the logic I write the code below.
```
const UserModel = require('../models/user');
exports.create = async (email, password) => {
const createdUser = await UserModel.create({
email,
password
});
return createdUser.toJSON();
};
```
So, I am planning to write integration tests. I will write some tests as below.
```
const userRepository = require('./repositories/user');
const userModel = require('./model/user');
const chai = require('chai');
it('should create a user by using the correct email and password', async () => {
const email = '[email protected]';
const password = 'test@Pass123';
const createdUser = await userRepository.create(email, password);
const userInDb = userModel.findOne(
{
id = createdUser.id
}
);
chai.expect(userInDb.email).to.be.equal(email);
chai.expect(userInDb.password).to.be.equal(password);
});
it('should return object representation of created user', async () => {
const email = '[email protected]';
const password = 'test@Pass123';
const createdUser = await userRepository.create(email, password);
chai.expect(typeof userInDb).to.be.equal('object');
});
```
So I have several questions.
1- Isn't the test enough? Should I write unit test for it? Or what are the benefits of having unit test for my method with or without my integration test.
2- Should I write integration test and unit test together?
3- How can I write unit test for my method?
Also something seems incorrect to me.
4- My tests are depend on eachother. Like, if my should return object test fails my other test could fail. Because i depent my return result will be an object in first test.
5- My tests depend on the package I use. My repository method uses sequelize for the logic. However if I change sequelize ORM with another ORM. I have to change my tests as well.