У меня есть приложение NodeJS Express, которое я хочу протестировать, используя файлы cookie. Итак, я хочу использовать beforeEach или before для создания файла cookie.
Код, который работает без проблем (но без метода before):
import * as chai from 'chai';
import { expect } from 'chai'
import chaiHttp = require('chai-http');
import { app } from '../../server';
describe('Relaties', () => {
describe('Ophalen alle relaties met: GET /api/ehrm-klantnr/relatie', () => {
it('should get alle relaties', (done) => {
let agent = chai.request.agent(app)
agent
.put('/api/ehrm-klantnr/medewerker/login')
.send({ email: '[email protected]', wachtwoord: '<secret>' })
.then(function (res) {
expect(res).to.have.cookie('SESSIONID');
// The `agent` now has the sessionid cookie saved, and will send it
// back to the server in the next request:
return agent.get('/api/ehrm-klantnr/relatie')
.set('meta','1')
.then(function (res) {
expect(res).to.have.status(200);
expect(res.body.data[0].vestiging).to.equal('Slib Hoofdkantoor');
done();
});
});
});
});
});
Что не работает, так это:
import * as chai from 'chai';
import { expect } from 'chai'
import chaiHttp = require('chai-http');
import { app } from '../../server';
describe('Relaties', () => {
let agent = chai.request.agent(app);
describe('First this one', function () {
beforeEach(function () {
console.info('outer describe - beforeEach');
agent
.put('/api/ehrm-klantnr/medewerker/login')
.send({ email: '[email protected]', wachtwoord: '<secret>' })
.then(function (res) {
expect(res).to.have.cookie('SESSIONID');
});
});
});
describe('Ophalen alle relaties met: GET /api/ehrm-klantnr/relatie', () => {
it('should get alle relaties', (done) => {
return agent.get('/api/ehrm-klantnr/relatie')
.set('meta', '1')
.then(function (res) {
expect(res).to.have.status(200);
expect(res.body.data[0].vestiging).to.equal('Slib Hoofdkantoor');
done();
});
});
});
});
Он полностью игнорирует мой метод before или beforeEach (оба метода не работают). Может быть, у chai-http нет поддержки before или beforeEach? Что я делаю неправильно ?
После реструктуризации.
describe('Relaties', () => {
const agent = chai.request.agent(app);
beforeEach(function (done) {
console.info('outer describe - beforeEach');
agent
.put('/api/ehrm-klantnr/medewerker/login')
.send({ email: '[email protected]', wachtwoord: '<secret>' })
.then(function (res) {
expect(res).to.have.cookie('SESSIONID');
done();
});
});
describe('Ophalen alle relaties met: GET /api/ehrm-klantnr/relatie', () => {
it('should get alle relaties', (done) => {
return agent.get('/api/ehrm-klantnr/relatie')
.set('meta', '1')
.then(function (res) {
expect(res).to.have.status(200);
expect(res).to.be.an('object');
expect(res.body.data).to.be.an('array');
expect(res.body.data[0]).to.be.an('object');
expect(res.body.data[0].id).to.equal(1);
done();
});
});
});
});
Я все еще получаю ошибки об обещании.
Я реструктурировал код
Спасибо, посмотрите мою реструктуризацию после изучения примера, который вы мне прислали, с примером асинхронной БД.
Какую конкретно ошибку вы видите? Можете ли вы опубликовать трассировку стека?
РЕШЕНО, проблема была в том, что я возвращаю агент. Так что если вернуться в код до удаления агента, то это работает как шарм.
Большое спасибо Михаилу за поддержку!!! Ваши примеры мне очень помогли.
Если это кому-то полезно, это окончательное решение:
describe('Relaties', () => {
const agent = chai.request.agent(app);
beforeEach(function (done) {
console.info('outer describe - beforeEach');
agent
.put('/api/ehrm-klantnr/medewerker/login')
.send({ email: '[email protected]', wachtwoord: '<secret>' })
.then(function (res) {
expect(res).to.have.cookie('SESSIONID');
done();
});
});
describe('Ophalen alle relaties met: GET /api/ehrm-klantnr/relatie', () => {
it('should get alle relaties', (done) => {
agent.get('/api/ehrm-klantnr/relatie')
.set('meta', '1')
.then(function (res) {
expect(res).to.have.status(200);
done();
});
});
});
});
Почему у вас есть
beforeEach
внутри описания без тестов? Проверьте эту ссылку. Он показывает правильную структуру тестов mochajs.org/#хуки