Apesar de eu ser muito acostumado a fazer testes unitários até hoje não escrevi nenhum teste End to End. Então hoje finalmente decidi aprender como fazer testes E2E
Tudo que eu descrever aqui nesse post foi feito no seguinte repositório
Escrevendo testes E2E
Primeiro precisei declarar o app usando express, e também a conexão com o banco usando o sequelize
export const app: Express = express();
app.use(express.json());
export let sequelize: Sequelize;
async function setupDb() {
sequelize = new Sequelize({
dialect: 'sqlite',
storage: ':memory:',
logging: false
});
sequelize.addModels([CustomerModel, ProductModel])
await sequelize.sync()
}
setupDb();
E então no meu arquivo de testes importei ambos junto com a função request do supertest
e então comecei declarando no beforeEach que o sequelize deve sempre recriar o schema antes de um novo teste e no afterAll fechei a conexão com o banco de dados
import {app, sequelize} from "../express"
import request from "supertest"
describe("E2E test for customer", () => {
beforeEach(async () => {
await sequelize.sync({force: true})
})
afterAll(async () => {
await sequelize.close()
})
it("should create a customer", async () => {
const response = await request(app)
.post("/customer")
.send({
name: "John Doe",
address: {
street: "123 Main St",
city: "Anytown",
number: 123,
zip: "12345"
},
});
expect(response.status).toBe(201)
expect(response.body.name).toBe("John Doe")
expect(response.body.address.street).toBe("123 Main St")
})
})
O teste fica basicamente assim, acabou sendo muito mais fácil do que imaginei que seria, agora basta garantir que meu endpoint /customer
do tipo POST
vai retornar os dados no formato esperado
Top comments (0)