当我们有
// arrange
var testVar = 0;
var testFunction = sandbox.stub();
// act
TestClass.TestMethod(); // it changes testVar and calls testFunction
有没有办法在调用 testFunction 之前测试 testVar 是否被更改?
编辑:看起来没有。但!如果变量是对象属性,您可以执行类似的操作。在下面检查我自己的答案。
当我们有
// arrange
var testVar = 0;
var testFunction = sandbox.stub();
// act
TestClass.TestMethod(); // it changes testVar and calls testFunction
有没有办法在调用 testFunction 之前测试 testVar 是否被更改?
编辑:看起来没有。但!如果变量是对象属性,您可以执行类似的操作。在下面检查我自己的答案。
好的,所以看起来它真的无法完成。
但是,我确实找到了一种使用对象属性进行测试的方法。示例伪代码:
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'
]);
});
});