сбросить базу данных перед каждым тестом - PullRequest
2 голосов
/ 07 октября 2019

Я использую нод и супер-тест для простого приложения. Я получил SQlite3 для локальной тестовой базы данных. Я сделал простой тест, чтобы вставить супер в базу данных. Я хотел сбросить базу данных при каждом запуске теста. Я сейчас просматриваю документы и не могу найти это. Я решил спросить здесь, потому что кажется, что кто-то, скорее всего, будет знать информацию.

const request = require('supertest');
const server = require('../server');

describe('Authentication', function() {

//database reset here

  it('should create a new user /users/registration', function(done) {
    request(server)
      .post('/users/register')
      .send({
        username: 'user-name',
        email: 'luser-name@gmail.com',
        password: '12345'
      })
      .set('Accept', 'application/json')
      .expect(201, done);
  });
});

Ответы [ 4 ]

2 голосов
/ 07 октября 2019

Если вы хотите запускать какой-либо фрагмент кода перед каждым тестом, вы можете использовать функцию beforeEach в jest

describe('my test', () => {
    beforeEach(() => {
       // code to run before each test
    });

    test('test 1', () => {
      // code
    });

   test('test 2', () => {
      // code
   });
});
0 голосов
/ 07 октября 2019

Я сделал это в файле, и он отлично работает

const request = require('supertest');
const server = require('../server');
const knex = require('knex');
const dbConfig = require('../knexfile.js')['test'];
const db = knex(dbConfig);

describe('Authentication', () => {
  beforeEach(async () => {
    await db('users').truncate();
  });

  it('should create a new user /users/registration', function(done) {
    request(server)
      .post('/users/register')
      .send({
        username: 'user-name',
        email: 'luser-name@gmail.com',
        password: '12345'
      })
      .set('Accept', 'application/json')
      .expect(201, done);
  });
});
0 голосов
/ 07 октября 2019

Не существует определенного способа сброса базы данных sqlite, просто удалите базу данных и создайте заново.

Sqlite: Как сбросить все таблицы базы данных?

0 голосов
/ 07 октября 2019

Так что лучший способ сделать это - иметь некоторую логику в функциях маршрутизации вашего Api

Receive an API request
Check if ['X-MOCK-HEADER'] exists
If it does then route to the mock version of the endpoint

Так что ваш макет для пользователя create всегда будет возвращать 201 OK - ваша фиктивная конечная точка будет делать что-то вроде этого:

const routes = {
   CREATE_USER_OK:() => { return {....} } // make sure these return proper http responses
   CREATE_USER_BAD_REQUEST: () { return {...} }
}

 return routes[HEADER_VALUE]()

Причина в том, что вы тестируете маршрут, а не класс базы данных в этом случае, поэтому вы просто хотите вернуть статические данные, если вы хотите проверить что-то еще, тогда просто измените X-MOCK-HEADERзначение того, что вы хотите, и добавьте фиктивный маршрут для возврата правильного http ответа / кода - мне нужно знать, как выглядел код API, чтобы помочь вам в реализации бэкэнда.

Если возможно, держитесь подальше отвозиться с подготовительными базами данных для тестирования, потому что в будущем вы будете испытывать МНОГО боли, постепенно заполняясь мусором.

Также, если вы работаете с внешним приложением, вы можете быстро создать прототип со статическими данными -это особенно полезно, если у вас есть передняя группа, ожидающая, пока конечная точка API скажет, создайте экран входа в систему.

...