【问题标题】:Access for global variables JavaScript unit testing访问全局变量 JavaScript 单元测试
【发布时间】:2015-02-13 23:17:00
【问题描述】:

您好,我是新的 JavaScript 单元测试,我正在使用 Mocha.js 和 Chai.js

我想做的只是弄清楚如何在单独的 js 文件中检查全局变量的值。这是我的代码

这是 main.js 文件(要测试的代码)只有我要测试的变量。

//main.js
var foo = 9;

这是我的测试文件

var assert = require("assert")
var expect = require('chai').expect
var fs = require("fs")
var vm = require("vm")

function include(path){
    var code = fs.readFileSync(path,'utf-8');
    vm.runInThisContext(code,path);
}

describe('Global', function(){
    include('lib/main.js');
    it('Should check if value is matching', function(){
        expect(foo).to.equal(9);
    });
});

再说一次,我是 JavaScript 单元测试的新手。任何帮助将不胜感激。我得到的错误是foo is not defined,它告诉我它无法访问该变量,那么我该如何访问它呢?提前感谢您的帮助。

【问题讨论】:

    标签: javascript unit-testing mocha.js chai


    【解决方案1】:

    var foo = 9; 没有声明全局变量,它声明了一个局部变量。在 Node.js 中,在模块最外层范围内声明的局部变量将是该模块的本地变量。

    如果你想测试在另一个文件中声明的局部变量的值,你最好的办法可能是将该文件的内容读入一个字符串(可能使用fs.readFileSync),然后再读入eval()这个字符串,它应该在当前范围内定义变量。

    只有在文件的最外层范围内声明了局部变量时才有效。例如,如果它是函数内部的局部变量,那么您就不走运了(除非您想做一些复杂的字符串解析,这会超出理智的界限)。

    【讨论】:

      【解决方案2】:

      你的全局对象通常是window

      全局var foo = "test";window.foo = "test";window['foo'] = "test"; 相同

      在 node 中运行 mocha 时没有定义窗口,但是这个 blog post 使用 "this" 结合自调用函数来获得相同的结果。

      【讨论】:

      • 是的 window 不在节点中运行。很抱歉没有澄清。使用 this 只会为参数返回 undefined
      • 好的,你说得对,它并不像应有的那样清晰。我会相应地编辑它。谢谢,@Louis!
      • 在 Node.js 中,全局对象是 global
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-07-29
      • 1970-01-01
      • 2016-05-28
      • 2020-09-07
      • 2011-10-06
      • 1970-01-01
      • 2014-01-17
      相关资源
      最近更新 更多