Авторизуйтесь в логине до теста Мокко / Чай - NodeJS - PullRequest
0 голосов
/ 16 января 2020

Я пытаюсь протестировать приложение NodeJS, используя Mocha и Chai. Я использую Auth0 для обработки входа и регистрации для приложения. Я хочу иметь возможность проверить, что после входа в систему пользователь может посещать несколько страниц, однако у меня возникают проблемы с обработкой фактического входа в систему.

.get('/login') перенаправляет меня на Auth0 страница входа, как я ожидаю. Тем не менее, несмотря на то, что .send(userCredentials) предоставляет действительные данные для входа в систему, он не может войти в систему. После входа в систему я ожидаю, что он перенаправит на 'localhost:3000/user', но, насколько я могу судить, окончательное перенаправление - на URL входа в Auth0, и я не уверен, является ли это перенаправление тем, что предотвращает отправку, или фактом перенаправления Эта проблема может возникать в течение одной или двух секунд.

Мой тестовый файл находится ниже.

var chai = require("chai");
var chaiHTTP = require("chai-http");
var chaiAP = require("chai-as-promised");
var server = require("../app");
var listing = require('../models/RDSModel');
var should = chai.should();
var expect = chai.expect;
var request = require("supertest");

const {Client} = require('pg');

var config = require('../config');

const connection = {
    user: 'Admin',
    host: process.env.DB_URL,
    database: 'postgres_test',
    password: config.postgresPass,
    port: 5432,
};

var pg = require('knex')({
    client: 'pg',
    connection: connection,
    searchPath: ["knex", "public"]
});

chai.use(chaiHTTP);
chai.use(chaiAP);

describe("Listing.js", function() {

    beforeEach("login before each test", function(done) {
        const userCredentials = {
            email: 'hello@email.co.uk',
            password: 'this_is_a_password!'
        };
        request(server)
        .get('/login')
        .send(userCredentials)
        .end(function(err, res) {
            console.log(res);
            expect(res).to.have.status(302);
            expect(res.body.state).to.be.true;
            res.body.data.should.be.an("object");
            done();
        })
    });

    describe("get /", function() {
        it("#return 200 status code", function(done) {
            this.timeout(5000);
            chai.request(server)
            .get('/Listing/')
            .end(function(err, res) {
                console.log(res.body);
                expect(res).to.have.status(200);
                expect('Location', '/Listing')
                expect(res.body).to.be.an("object");
                done();
            })
        }) 
    });

    describe("get /Ignore", function() {
        it("should return 200 status code", function(done) {
            this.timeout(5000);
            chai.request(server)
            .get('/Listing/Ignore')
            .end(function(err, res) {
                expect(res).to.have.status(200);
                expect(res.body).to.be.an("object");
                done();
            })
        })
    })
    describe("get /Report", function() {
        it("should return 200 status code", function(done) {
            this.timeout(5000);
            chai.request(server)
            .get('/Listing/Report')
            .end(function(err, res) {
                expect(res).to.have.status(200);
                expect(res.body).to.be.an("object");
                done();
            })
        })
    })  
})

Причина, по которой он дает ошибку:

  1) Listing.js
       "before each" hook: login before each test:
     Uncaught AssertionError: expected undefined to be true
      at Test.<anonymous> (test/test-listing.js:44:41)
      at Test.assert (node_modules/supertest/lib/test.js:181:6)
      at localAssert (node_modules/supertest/lib/test.js:131:12)
      at /Users/<Name>/Documents/Node/NodeStuff/node_modules/supertest/lib/test.js:128:5
      at Test.Request.callback (node_modules/supertest/node_modules/superagent/lib/node/index.js:728:3)
      at IncomingMessage.<anonymous> (node_modules/supertest/node_modules/superagent/lib/node/index.js:916:18)
      at IncomingMessage.EventEmitter.emit (domain.js:476:20)
      at endReadableNT (_stream_readable.js:1183:12)
      at processTicksAndRejections (internal/process/task_queues.js:80:21)

body из res пусто, как и text, что мне кажется странным.

Любая помощь будет признательна.

1 Ответ

0 голосов
/ 18 января 2020

Вы пытаетесь интегрировать свой набор тестов в маршрут интерактивного входа. Что вам действительно нужно, так это неинтерактивный вход в систему. С Auth0 это может быть достигнуто с помощью конечной точки oauth / token POST. Вам понадобится электронная почта пользователя, а также код подтверждения, отправленный на этот адрес электронной почты (чтобы вы не могли использовать непроверенные электронные письма) и секрет клиента:

https://auth0.com/docs/api/authentication#authenticate -пользователь

Или вы можете использовать токен управления, полученный из API управления, для выполнения действий.

...