Написание модульного теста в node.js с использованием mocha для моделирования очереди служебной шины azure для получения сообщений - PullRequest
0 голосов
/ 23 марта 2020

Я написал тестовый блок, но он дает ошибку. Пожалуйста, найдите код ниже

index.js

const { ServiceBusClient, ReceiveMode } = require("@azure/service-bus");

module.exports = async function (context, myTimer) {

// Define connection string and related Service Bus entity names here
const connectionString = process.env['serviceBusConnectionString'];
const queueName = process.env['serviceBusQueueName'];
const sbClient = ServiceBusClient.createFromConnectionString(connectionString);
const queueClient = sbClient.createQueueClient(queueName);
//const receiver = queueClient.createReceiver(ReceiveMode.receiveAndDelete);
const receiver = queueClient.createReceiver(ReceiveMode.peekLock);

const messages = await receiver.receiveMessages(1);
try {

    let payloads = [];
    messages.forEach((msg) => {
        payloads.push(msg.body);
    })

    await queueClient.close();
} catch (err) {
    context.log('Queue message status settle: abandon');
    await messages[0].abandon();
    console.log('Error ', err);
} finally {
    await sbClient.close();
    context.done();
}

};

Это файл модульного теста, и я получаю ошибку. Пожалуйста, дайте мне знать, почему я получаю эту ошибку введите описание изображения здесь

indexTest. js:

beforeEach(() => {
        const sbClientStub = {
            createQueueClient: sinon.stub().returnsThis(),
            createReceiver: sinon.stub().returnsThis(),
            receiveMessages:sinon.stub(),
            close: sinon.stub(),
        };
        sinon.stub(ServiceBusClient, 'createFromConnectionString').callsFake(() => sbClientStub);
        const ctx = {};
        // const actual = await pushToQueue(message, ctx);
        // sinon.assert.match(actual, 2);
        sinon.assert.calledWithExactly(ServiceBusClient.createFromConnectionString, undefined);
        sinon.assert.calledWithExactly(sbClientStub.createQueueClient, undefined);
        sinon.assert.calledOnce(sbClientStub.createReceiver, undefined );
        //sinon.assert.calledWithExactly(sbClientStub.send.firstCall, { body: 'a' });
        //sinon.assert.calledWithExactly(sbClientStub.send.secondCall, { body: 'b' });
        sinon.assert.calledTwice(sbClientStub.close); 
    });

1 Ответ

0 голосов
/ 30 марта 2020

Вы должны заменить каждые sinon.stub() на sinon.spy(). Заглушка предотвратит вызов исходной реализации методов, но шпионы это сделают. В основном они имеют одинаковые API.

Чтобы вызвать исходные методы @azure/service-bus, убедитесь, что ресурсы @azure/service-bus готовы, такие как переменные среды, учетная запись службы, очередь и т. Д.

Если вы сделаете это, модульные тесты больше не будут изолированы. Фактически, это уже не модульные тесты, а интеграционные тесты или тесты e2e.

...