sinon chai - 期望值在全球范围内定义

sinon chai - expect value defined in global scope

我有一个包含 class 以及一些全局定义变量的文件。这是一个简化版本:

let globalVar = 0;

export default class Example {
  ...
  ...

  run() {
    this.key1 = 123;
    this.key2 = 345;
    this.key3 = 567;

    globalVar += 1;    
  }
}

我想测试这个变量的值以及在 class 本身上实际设置的一些值。

  it('should set values when run() is run', () => {
    example.values = {
      key1: 123,
      key2: 345,
      key3: 567,
    };

    example.run();

    expect(example.values.key1).to.eql(123);
    expect(example.values.key2).to.eql(345);
    expect(example.values.key3).to.eql(567);


    expect(globalVar).to.eql(1);
  });

this值通过,但全局变量失败。我还尝试在节点的 global 对象上设置它:

expect(global.globalVar).to.eql(1);

node 中的每个文件都有自己的范围,因此 globalVar 不能直接从测试文件访问 expect(globalVar).to.eql(1);

解决方法是我们可以创建一个 returns globalVar 的函数,例如:

// src.js

let globalVar = 0;

export default class Example {
  ...
  ...

  run() {
    this.key1 = 123;
    this.key2 = 345;
    this.key3 = 567;

    globalVar += 1;    
  }

  getGlobalVar() { // adding a new method here
    return globalVar;
  }
}

稍后,在测试文件中

expect(example.globalVar()).to.eql(1);

希望对您有所帮助