存根未被调用

Stub not being called

我对我的一个控制器进行了单元测试,它具有查找数据(续集)并将结果作为 json 添加到响应对象的单一功能。

我有两个存根,一个叫做另一个不是。

控制器

exports.findAll =  (req, res) => {
    Idea.findAll().then(ideas => {
        console.log(ideas);
        return res.json(ideas);
    }).catch(err => {
        console.log(err);
    });
};

控制器测试

const chai = require('chai');
const {match, stub, resetHistory, spy} = require('sinon');
const proxyquire = require('proxyquire');
var sinonChai = require("sinon-chai");
chai.should();
chai.use(sinonChai);

const {makeMockModels} = require('sequelize-test-helpers');

describe('Idea Controller', function () {

    const data = {
        id: 1,
        title: 'Stubbed Title',
        text: 'Stubbed text'
    };

    describe('findAll()', function () {
        it('Success case ', function () {

            const mockResponse = () => {
                const res = {};
                res.json = stub().returns(res);
                return res;
            };

            let res = mockResponse();

            const Idea = {findAll: stub()};
            const mockModels = makeMockModels({Idea});

            Idea.findAll.resolves(data);

            const ideaController = proxyquire('../../src/controllers/IdeaController', {
                '../models': mockModels
            });

            ideaController.findAll({}, res);

            Idea.findAll.should.have.been.called; // passes
            res.json.should.have.been.called; //fails
        });
    })
});

由于 findAll 是异步函数,您应该将断言移到 .then.