موكا قبل ربط لا يعمل مع تشاي HTTP

0

هذا هو رمز الاختبار الخاص بي. أنا اختبار API. المشكلة هي أن ربط "بعد" يعمل وإسقاط قاعدة البيانات بعد انتهاء الاختبار. لكن الخطاف "قبل" لا يعمل. ما المشكلة هنا؟ حاولت ولكن لم أتمكن من معرفة المشكلة. حاولت تشغيل الخطاف قبل اختبار وهمية واحد فقط مثل تسجيل شيء في وحدة التحكم. لم يعمل أيضا.

const chai = require('chai');
const { assert } = require('chai');
const chaiHttp = require('chai-http');
const mongoose = require('mongoose');

mongoose.Promise = global.Promise;
require('../resolvedir');
const User = require('models/User');
const server = require('bin/www');
const testData = require('./test_data');

chai.use(chaiHttp);

describe('Empty User Collection before test', function () {
  it('should drop User Collection before test starts', function () {
    before(function (done) {
      User.collection.drop();
      done();
    });
  });
});


describe('Testing /registration end point', () => {
  it('should return a valid JWT token', (done) => {
    chai.request(server)
      .post('/register')
      .send({ name: testData.name, email: testData.email, password: testData.password })
      .end((err, res) => {
        assert.equal(res.status, 200, 'Http response code is 200');
        assert.exists(res.body.auth, 'Auth confirmation message exist');
        assert.isTrue(res.body.auth, 'Auth confirmation message is true');
        assert.exists(res.body.token, 'JWT token is neither null or undefined');
        assert.isString(res.body.token, 'JWT token is string');
        done();
      });
  });

  it('should fail registration', (done) => {
    chai.request(server)
      .post('/register')
      .send(testData)
      .end((err, res) => {
        assert.equal(res.status, 409, 'Http response code is 409');
        assert.isString(res.body.message);
        assert.equal(res.body.message, 'User Exist');
        done();
      });
  });
});

describe('Testing /login end point', function () {
  it('should get a valid JWT token on successful login', function (done) {
    chai.request(server)
      .post('/login')
      .send({ email: testData.email, password: testData.password })
      .end((err, res) => {
        assert.isString(res.body.token, 'JWT token is string');
        done();
      });
  });
});

describe('Empty User Collection after test', function () {
  it('should drop User Collection after test ends', function () {
    after(function (done) {
      User.collection.drop();
      done();
    });
  });
});

1 إجابة

0

وعود دعم Mongoose و MongoDB. chai-http يدعم الوعود كذلك.

before يجب أن يقيم في الداخل describe كتلة ، ليس بالداخل it . موكا يدعم وعود الكتل غير المتزامنة ، لا done مهم. لكن الاختبارات تستخدم done وبطريقة غير متناسقة. before غير متزامن ، ولكن done() يسمى بشكل متزامن. done() يتم استدعاؤه فقط عند النجاح في الاختبارات ، عندما يفشل التأكيد في هذه النتائج في مهلة الاختبار.

يجب أن يكون:

describe('Empty User Collection before test', function () {
  before(function () {
    return User.collection.drop();
  });

  it('should drop User Collection before test starts', function () {
    ...
  });
});

و

  it('should get a valid JWT token on successful login', function () {
    return chai.request(server)
      .post('/login')
      .send({ email: testData.email, password: testData.password })
      .then((res) => {
        assert.isString(res.body.token, 'JWT token is string');
      });
  });

وإلخ.

إذا كان ينبغي إسقاط قاعدة البيانات Testing /registration end point جناح الاختبار ، يجب أن يكون هناك before يسقط قاعدة بيانات أيضًا - أو يمكن أن يكون لجميع الاختبارات أصل describe مع before :

describe('Suite', function () {
  before(function () {
    return User.collection.drop();
  });

  describe('Testing /registration end point', () => {...})

  describe('Testing /login end point', () => {...})
  ...
});
:مؤلف

أسئلة ذات صلة

فوق
قائمة طعام