Тесты E2E

Хотя я очень привык делать модульные тесты, до сегодняшнего дня я не написал ни одного 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 вернет данные в ожидаемом формате

Оцените статью
Procodings.ru
Добавить комментарий