Не могу очистить базу данных после запуска тестов на Mocha и Chai, используя mongodb с mon goose в моем приложении node.js - PullRequest
0 голосов
/ 22 января 2020

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

вот мой тест. js

process.env.NODE_ENV = 'test';
// const mongoose = require('mongoose');
const chai = require('chai');
const chaiHttp = require('chai-http');
const Task = require('../config/model');
const server = require('../index');

const { expect } = chai;

chai.use(chaiHttp);

describe('Task', (done) => {
  afterEach(() => {
    Task.crud.drop();
    done();
  });
});

// Test Get Tasks

describe('/GET tasks', () => {
  it('it should GET all the tasks', async () => {
    const res = await chai.request(server)
      .get('/task');
      // .end((err, res) => {
    expect(res).to.have.status(200);
    // expect(res.body).to.be.a('array');
    // done(err);
  });
});

describe('/Post tasks', () => {
  it('should Post the task', async () => {
    const taskPost = {
      task: 'run as fast as possible you idiot',
    };
    const res = await chai.request(server)
      .post('/task')
      .send(taskPost);
      // .end((err, res) => {
    expect(res).to.have.status(200);
    //  done();
  });
});

describe('/GET/:ID', () => {
  it('should Get the task by ID', async () => {
    const tasks = new Task({ task: 'The Lord of the Rings' });
    const task = await tasks.save();
    const res = await chai.request(server)
      .get(`/task/${task.id}`)
      .send(task);
      // .end((error, res) => {
    expect(res).to.have.status(200);
    //  done();
    // });
  });
});

describe('/PUT/:ID task', () => {
  it('it should UPDATE a task given the id', async () => {
    const tasks = new Task({ task: 'The Chronicles of Narnia' });
    const task = await tasks.save();
    const res = await chai.request(server)
      .put(`/task/${task.id}`)
      .send({ task: 'The Chronicles of Sarvesh' });
    // .end((error, res) => {
    expect(res).to.have.status(200);
    // });
  });
});

и файлы, которые находится в / config / model

const mongoose = require('mongoose');

const Schema = new mongoose.Schema({
  task: {
    type: String,
    required: true,
  },

});

module.exports = mongoose.model('crud', Schema, 'crud');

1 Ответ

0 голосов
/ 22 января 2020

Я не думаю, что у модели есть какой-либо встроенный метод отбрасывания. Вам нужно либо использовать db.collection("collectionName").drop(), для которого вам нужен дескриптор текущей базы данных, либо использовать deleteMany и удалить все внутри коллекции. как то так

describe('Task', (done) => {
  afterEach(() => {
    Task.crud.deleteMany({}, (err, response) => {
      done();
    });
  });
});

...