节点 js 邮件喷射方法链接存根

Node js mail jet method chaining stub

在这里,我想断言回调函数是否被调用。那么我怎样才能使用 sinon js 来做到这一点。请提出建议。

var send = function (templateId, callback) {

    const request = mailjet
        .post("send")
        .request(params)
    request
        .then((result) => {
            if (typeof callback === 'function') {
                callback(null, result.body);
            }

        })
        .catch((err) => {
            if (typeof callback === 'function') {
                callback(err, null);
            }
        })
    } else {
        callback(err, null);
    }
};

我试过如下:

var mailjetClient = require('../../node_modules/node-mailjet/mailjet-client');

sinon.stub(mailjet, 'post').withArgs('send').returns(mailjetClient);
sinon.stub(mailjetClient, 'request').returns(Promise);

我收到以下错误:

TypeError: Attempted to wrap undefined property request as function

试试这个它会起作用,你必须指定什么 post 方法 return,然后 return 并请求 return.

   var cb = sinon.spy();

   var obj = {successId: 12121};  // Any success response

   var then = sinon.stub().callsArgWith(0, obj).returns(
        {
            catch: sinon.stub()
        }
    );

    var request = sinon.stub().returns(
        {
            then: then
        }
    );

    sinon.stub(mailjet, "post", () => {
        return {
            request: request
        };
    });

    mailSender.send(templateName, cb);
    sinon.assert.calledOnce(cb);
    mailjet.post.restore();