首页 > 解决方案 > sinon chai - 期望在全局范围内定义的值

问题描述

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

let globalVar = 0;

export default class Example {
  ...
  ...

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

    globalVar += 1;    
  }
}

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

  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,但全局变量失败。我还尝试在globalNode 的对象上设置它:

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

标签: javascriptunit-testingsinonsinon-chai

解决方案


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

解决方法是我们可以创建一个返回的函数,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);

希望能帮助到你


推荐阅读