Armazenar 'response params' para uso em outros testes (Supertest + Mocha)



  • Boa tarde pessoal !

    Estou com uma dificuldade ao utilizar o Supertest + Mocha e gostaria da ajuda de vocês.

    Problema: Armazenar o token recebido na resposta do método PUT da API para uso futuro, ou seja, para utilizá-lo em outros métodos que exigem este token.

    Eu estou tentando resolver este problema via exports desta forma:

    conf.js

    const supertest = require('supertest')('http://localhost:8080');
    
    it("Login", function (done) {
        supertest
            .put('/api/login')
            .send({
                userName: "xxx",
                password: "yyyy",
                rememberMe: true
            })
            .expect(200)
            .end(function (err, res) {
                var token = res.header["set-cookie"][0];
                token = token.split(";")[0];
                exports.token = token;
                if (err) throw err;
                done();
            });
    });
    

    spec.js

    const supertest = require('supertest')('http://localhost:8080');
    const token = require('../conf').token;
    
    describe('Alarm', function () {
    
        it('GET /api/account-manager/alarm-status', function (done) {
            supertest
                .get('/api/account-manager/alarm-status')
                .set('Cookie', token)
                .expect(200, {
                    status: '0'
                })
                .end(function (err, res) {
                    if (err) throw err;
                    done();
                });
        });
    
    });
    

    Contudo, como o .end do PUT returna uma Promise , ao realizar o require(’…/conf’).token eu estou recebendo undefined , ao invés do valor do token. “Acredito que por causa da Promise não ter sido resolvida.”

    Alguém pode dar uma dica de como resolver?

    Espero que eu tenha conseguido explicar a minha dificuldade.

    Obs: Estou usando faz pouco o tempo o framework

    Desde já agradeço.



  • Bom dia galera !

    Acabei resolvendo de um jeito que eu não gosto muito. Para cada arquivo de spec eu acrescentei um before, armazenando o token em uma variável. E, assim, utilizando esta variável para os demais testes do arquivo spec.

    Problema desta solução: Para cada arquivo spec do projeto, eu precisarei utilizar este método de autenticação para receber o token.

    Alguém conhece alguma outra solução para este problema?





  • Show Leonardo, não tinha visto não. Vou dar uma olhada.

    Obrigado