Используйте ChaiHttp с методом beforeEach или перед

У меня есть приложение 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();
                });
        });
    });
});

Я все еще получаю ошибки об обещании.

Почему у вас есть beforeEach внутри описания без тестов? Проверьте эту ссылку. Он показывает правильную структуру тестов mochajs.org/#хуки

Michael Platt 30.05.2019 19:28

Я реструктурировал код

Ben 31.05.2019 00:02

Спасибо, посмотрите мою реструктуризацию после изучения примера, который вы мне прислали, с примером асинхронной БД.

Ben 31.05.2019 00:03

Какую конкретно ошибку вы видите? Можете ли вы опубликовать трассировку стека?

Michael Platt 31.05.2019 03:03

РЕШЕНО, проблема была в том, что я возвращаю агент. Так что если вернуться в код до удаления агента, то это работает как шарм.

Ben 31.05.2019 09:53

Большое спасибо Михаилу за поддержку!!! Ваши примеры мне очень помогли.

Ben 31.05.2019 09:54
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
6
511
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Если это кому-то полезно, это окончательное решение:


 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();
                });
        });
    }); 
});

Другие вопросы по теме