Подтвердить что ты не робот

Тестирование на шлейф с супертестом, моккой и моделями

На публикация групп Google на устаревших тестах на петлю возникает вопрос, который требует правильного примера того, как тестирование может быть достигнуто без петлевой-тестирование. В этой ветке говорится об использовании supertest.

Ниже я попытался объединить Mocha, supertest вместе с моделями (из app.js). Результат работает очень хорошо, когда я запускаю файл сам по себе. Но если бы у меня был еще один тестовый файл (скажем, test-teacher.js), то первый тестовый файл (назовем его test-student.js) начинает терпеть неудачу в странных способах, которые я не могу описать.

Я что-то упускаю или могу не использовать модели, как я их использую ниже?

describe('/Student', function () {

    var server = require('../server/server')
    var loopback = require('loopback')
    var supertest = require('supertest')
    var request = require('supertest')(server)

    var dataSource = server.dataSource('db', {adapter: 'memory'})

    var Student = dataSource.define('Student', {
        'id': Number,
        'points': Number
    });

    beforeEach(function () {
        Student.updateOrCreate({id: 1, points: 5000});
    })


    it('Post a new student', function (done) {
        request.post('/api/Students').send({points: 5000}).expect(200, done)

    })


})
4b9b3361

Ответ 1

На основе отзывов от jakerella о предыдущем ответе я изменил код выше, так что мне не нужно переопределять модели с нуля в коде (спасибо jakerella!)

В приведенном ниже коде я могу выполнить все тесты из нескольких разных моделей в виде одного набора с помощью npm test без каких-либо сбоев.

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

describe('/Student', function () {

    var server = require('../server/server')
    var request = require('supertest')(server)
    var expect = require('expect.js')

    var Student 

    before(function() {
        Student = server.models.Student    
    })

    beforeEach(function (done) {
        Student.upsert({id: 1, points: 5000}, function() { done() })
    })    

    it('Post a new student', function (done) {
        request.post('/api/Students').send({points: 5000}).expect(200, done)
     })
})

Ответ 2

Хотелось забросить это в ответ... первой проблемой был undefined dataSource var, но затем вы также переопределили Student в своих двух тестах. Вместо моей рекомендации используется приложение LoopBack и уже определенные модели (обычно в common/models/). Тогда базовая реализация для тестирования (я использую) - это что-то вроде кода ниже (используя mocha и chai). Обратите внимание на beforeEach и afterEach, чтобы запустить и остановить сервер.

var assert = require('chai').assert,
    superagent = require('superagent'),
    app = require('../server/server');

describe('Person model', function() {
  var server;

  beforeEach(function(done) {
    server = app.listen(done);
  });

  afterEach(function(done) {
    server.close(done);
  });

  it('should log in and log out with live server', function(done) {
    superagent
      .post('http://localhost:3000/api/People/login')
      .send({ email: '[email protected]', password: 'foobar' })
      .set('Accept', 'application/json')
      .set('Content-Type', 'application/json')
      .end(function(err, loginRes) {
        if (err) { return done(err); }

          assert.equal(loginRes.status, 200);
          assert.ok(loginRes.body);
          assert.equal(loginRes.body.userId, 1);
        }
      });
  });
});