Хотя я очень привык делать модульные тесты, до сегодняшнего дня я не написал ни одного End to End теста. Сегодня я наконец-то решил научиться делать тесты E2E.
Все, что я описываю в этом посте, было сделано в следующем репозитории
Написание тестов E2E
Сначала мне нужно было объявить приложение с помощью express, а также подключение к базе данных с помощью 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();
А затем в моем тестовом файле я импортировал обе функции вместе с функцией запроса супертеста
и затем я начал объявлять в beforeEach, что sequelize должен всегда воссоздавать схему перед новым тестом, а в afterAll я закрыл соединение с базой данных
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")
})
})
Тест выглядит следующим образом, он оказался намного проще, чем я думал, теперь мне просто нужно убедиться, что моя конечная точка /customer
типа POST
вернет данные в ожидаемом формате