Javascript 变量的值不为';每次见面前打电话进来后,你不换吗?
我正在和Jasmine一起测试,我遇到了间谍实现 我有一段代码:Javascript 变量的值不为';每次见面前打电话进来后,你不换吗?,javascript,jasmine,Javascript,Jasmine,我正在和Jasmine一起测试,我遇到了间谍实现 我有一段代码: describe("A spy", function() { let foo; let bar = null; beforeEach(function() { foo = { setBar: function(value) { bar = value; } }; spyOn(foo, 'setBar'); foo.setBar(123);
describe("A spy", function() {
let foo;
let bar = null;
beforeEach(function() {
foo = {
setBar: function(value) {
bar = value;
}
};
spyOn(foo, 'setBar');
foo.setBar(123);
foo.setBar(456, 'another param');
console.log(bar)
});
it("tracks all the arguments of its calls", function() {
expect(foo.setBar).toHaveBeenCalledWith(123);
expect(foo.setBar).toHaveBeenCalledWith(456, 'another param');
expect(bar).toBeNull(); /* Why is this NULL it should be 456 because it the last value we called our function with!!!*/
});
});
我已经添加了这个注释/*为什么这个值为空,应该是456*/代码>只是为了澄清我不明白的地方。
因为这个代码:
let bar1 = null
let foo1 = {
setBar: function(value) {
bar1 = value;
}
}
foo1.setBar(123);
foo1.setBar(456, 'another param');
console.log(bar1) // 456
打印456
如果在调用函数(这里是foo.setBar)时启用了spyOn
,默认情况下jasmine不会调用实际函数,它只会跟踪细节
如果要调用实际函数,必须指定spyOn(foo,'setBar')。和.callThrough()代码>而不仅仅是间谍(foo,'setBar')
此后,您可以观察到expect(bar)
将失败,而expect(bar)
将成功