【问题标题】:Stub not being called存根未被调用
【发布时间】:2019-08-13 17:23:41
【问题描述】:

我对我的一个控制器进行了单元测试,它有一个查找数据(续集)并将结果作为 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内部测试
  • 谢谢,这正是问题所在。将 json 断言移到里面然后解决了这个问题
  • @rkm 提供的答案如果解决了您的问题,则应标记为已接受。

标签: javascript sequelize.js sinon chai


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2018-11-17
    • 2021-07-26
    • 2019-07-27
    • 2020-02-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-14
    相关资源
    最近更新 更多