微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么 sinon 忽略我对另一个函数的调用?

如何解决为什么 sinon 忽略我对另一个函数的调用?

我在单元测试中使用了 sinon 间谍。我正在测试的函数调用了一次被监视的函数,但 sinon 坚持认为它根本没有调用它。

正在测试的代码

const blank = ' '

const displayBoard = (board) => {
    console.log('+-+-+-+-+-+-+-+-+-+');
    console.log('| |0|1|2|3|4|5|6|7|')
    console.log('+-+-+-+-+-+-+-+-+-+');
    for (let row = board.length - 1; row > -1; row--) {
        let r = `|${row}|`
        for (let column = 0; column < 8; column++) {
            r += board[row][column][1] + '|';
        }
        console.log(r);
        console.log('+-+-+-+-+-+-+-+-+-+');
    }
};

const initialise = () => {
    let board = [];
    board[0] = [['b','w'],['w',blank],['b',blank]];
    board[1] = [['w','w']];
    board[2] = [['b',blank]];
    board[3] = [['w',blank]];
    board[4] = [['b',blank]];
    board[5] = [['w','b'],'b']];
    board[6] = [['b',];
    board[7] = [['w','b']];
    displayBoard(board);
    return board;
};

module.exports = { initialise,displayBoard };

还有我的单元测试:

const draughts = require('../src/draughts');
const mocha = require('mocha');
const chai = require('chai');
const sinon = require('sinon');

const expect = chai.expect;

describe('draughts',()=>{
    it('should initialise board',()=>{
        result = draughts.initialise();
        expect(result).to.be.an('array');
    })
    it('should spy the display method',()=>{
        let spy = sinon.spy(draughts,'displayBoard');
        draughts.initialise();
        sinon.assert.calledOnce(spy);
    })
});

来自 sinon 的消息:

  1. 吃水 应该监视显示方法: AssertError:预期 displayBoard 被调用一次但被调用了 0 次 在 Object.fail (node_modules\sinon\lib\sinon\assert.js:110:25) 在 failAssertion (node_modules\sinon\lib\sinon\assert.js:67:20) 在 Object.assert。 [as calledOnce] (node_modules\sinon\lib\sinon\assert.js:93:17) 在上下文。 (测试\draughts.test.js:16:22) 在 processImmediate (internal/timers.js:461:21)

解决方法

将您的草稿实施更改为这样的内容。

const draughts  = { initialise,displayBoard };
module.exports = draughts;

然后在初始化函数中,您可以使用 draughts.displayBoard(board);

调用 displayBoard

这样 sinon spy 就可以工作了。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?