Javascript 变量的值不为';每次见面前打电话进来后,你不换吗?

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);

我正在和Jasmine一起测试,我遇到了间谍实现

我有一段代码:

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)
将成功