Проверьте содержимое электронной почты с помощью мокко - PullRequest
0 голосов
/ 09 июля 2020

Я использую тесты записи Node JS, mocha и googleapi для проверки содержимого электронной почты

Когда я запускаю googleapi как отдельный файл node js, я могу получать почту, но когда я интегрирую его с mocha тесты я не вижу никаких результатов, пожалуйста, помогите

test spe c файл (проверьте. js)

var checkEmail = require('../shared/checkEmail');
const { google } = require('googleapis');
var expect = require('chai').expect;
var chai = require('chai');
var chaiAsPromised = require('chai-as-promised');
const { isNullOrUndefined } = require('util');

chai.use(chaiAsPromised);
chai.should();

var emailRecords = new Array();
var content;
var auth;

describe('GMAIL Testing', function () {
    before('Connect to Gmail server', function () {

        content = checkEmail.getAuthentication();
        auth = checkEmail.authorize(content);

        // Random test data
        var a = [{ "Id": "123", "MsgId": "34677", "Type": "aaa", "Subject": "subxxxx", "ToAddress": "abc@gmail.com", "ToName": "ABC", "DateCreated": "2020-07-09T18:25:38.047Z" }];
        emailRecords.push(a);
        var b = [{ "Id": "456", "MsgId": "34655", "Type": "bbb", "Subject": "subject", "ToAddress": "abc@gmail.com", "ToName": "ABC", "DateCreated": "2020-06-09T18:25:38.047Z" }];
        emailRecords.push(b);
    });


    it('Gmail Verification', function () {
        emailRecords.forEach(element => {
            const gmail = google.gmail({ version: 'v1', auth });
            var query = "from:noreply@somedomain.com " + element[0].MsgId;
            console.log('getting mail '+ element[0].MsgId);
            gmail.users.messages.list({
                userId: 'me',
                q: query
            }, (err, res) => {
                if (err) return console.log('The API returned an error: ' + err);

                var mails = res.data.messages;
                console.log('mail(s) found');
                expect(mails.length).to.be.at.least(1);
            });
            console.log('completed search');
        });
    });
});

Utility File checkEmail . js Ref -> Gmail API

const fs = require('fs');
const readline = require('readline');
const { google } = require('googleapis');
var base64 = require('js-base64').Base64;
const cheerio = require('cheerio');
var open = require('open');
const { isNullOrUndefined } = require('util');
var Mailparser = require('mailparser').MailParser;

const SCOPES = ['https://www.googleapis.com/auth/gmail.readonly'];
// The file token.json stores the user's access and refresh tokens, and is
// created automatically when the authorization flow completes for the first
// time.
const TOKEN_PATH = 'token.json';

module.exports = new class checkEmail {


    getAuthentication() {
        // Load client secrets from a local file.
        console.log('getting auth');
        this.content = JSON.parse(fs.readFileSync('shared/config/credentials.json', 'utf8'));

        return this.content;
    }

    authorize(credentials) {
        const { client_secret, client_id, redirect_uris } = credentials.installed;
        const oAuth2Client = new google.auth.OAuth2(
            client_id, client_secret, redirect_uris[0]);

        var token = fs.readFileSync(TOKEN_PATH, 'utf-8');
        if (token == isNullOrUndefined) {
            token = getNewToken(oAuth2Client);
        }
        oAuth2Client.setCredentials(JSON.parse(token));
        return oAuth2Client;
    }

    getNewToken(oAuth2Client) {
        const authUrl = oAuth2Client.generateAuthUrl({
            access_type: 'offline',
            scope: SCOPES,
        });
        var newToken;
        console.log('Authorize this app by visiting this url:', authUrl);
        const rl = readline.createInterface({
            input: process.stdin,
            output: process.stdout,
        });
        rl.question('Enter the code from that page here: ', (code) => {
            rl.close();
            oAuth2Client.getToken(code, (err, token) => {
                if (err) return console.error('Error retrieving access token', err);
                oAuth2Client.setCredentials(token);
                // Store the token to disk for later program executions
                fs.writeFile(TOKEN_PATH, JSON.stringify(token), (err) => {
                    if (err) return console.error(err);
                    console.log('Token stored to', TOKEN_PATH);
                });
                newToken = token;
            });
        });
        return newToken;
    }

}

Я попытался добавить сообщения отладки, но ничего не печатается и не возникает никаких ошибок. Сообщите мне, если я что-то отсутствует

вывод после выполнения тестов

>. \ node_modules.bin \ mocha. \ test \ verify. js

Тесты кажутся пройденными, но console.log('mail(s) found'); не отображается в выводе

введите описание изображения здесь

1 Ответ

1 голос
/ 10 июля 2020

Ваш тест заканчивается до того, как завершится ваш сетевой запрос.

См. Этот раздел в документации mocha. https://mochajs.org/#asynchronous -код

Вам нужно либо использовать обратный вызов done, либо вернуть обещание.

Если вы можете использовать async/await Я считаю, что это самый простой, потому что функция async всегда возвращает обещание: https://mochajs.org/#using -asyn c -await

...