Sinon:测试函数调用和var变化的顺序

时间:2016-12-02 12:41:10

标签: javascript sinon chai sinon-chai

当我们有

// arrange
var testVar = 0;
var testFunction = sandbox.stub();

// act
TestClass.TestMethod(); // it changes testVar and calls testFunction

有没有办法在testFunction被调用之前测试testVar是否被更改?

编辑:看起来没有。但!如果变量是对象属性,则可以执行类似的操作。请在下面查看我自己的答案。

1 个答案:

答案 0 :(得分:0)

好的,看起来好像无法完成。

但是,我确实找到了一种使用对象属性进行测试的方法。伪代码示例:

before(function() {
    var functionCallOrder = [];

    document.body.classList.add = function() {
        functionCallOrder.push('added class');
    };

    Object.defineProperty(document.body, 'scrollTop', {
        set: function() {
            functionCallOrder.push('changed viewport location');
        }
    });

    it('should set a class before changing the viewport location'), function() {
            // act
            MyModule.methodThatDoesWhatTheDescriptionSays();

            // assert
            expect(functionCallOrder).to.deep.equal([
                'added class',
                'changed viewport location'
            ]);
    });
});