【问题标题】:sinon chai - expect value defined in global scopesinon chai - 期望在全局范围内定义的值
【发布时间】:2019-08-22 16:20:50
【问题描述】:

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

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

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

【问题讨论】:

标签: javascript unit-testing sinon sinon-chai


【解决方案1】:

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

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

希望对你有帮助

【讨论】:

    猜你喜欢
    • 2022-01-23
    • 2019-01-25
    • 2016-05-08
    • 1970-01-01
    • 1970-01-01
    • 2022-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多