Тестирование на шлейф с супертестом, моккой и моделями
На публикация групп 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)
})
})
Ответы
Ответ 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);
}
});
});
});