访问全局变量JavaScript单元测试

时间:2015-02-13 23:17:00

标签: javascript unit-testing mocha chai

您好我是新的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,它告诉我它无法访问变量,那么我该如何访问它?提前感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

您的全局对象通常为window

全球var foo = "test";window.foo = "test";window['foo'] = "test";

相同

当mocha在节点中运行时未定义窗口,但此blog post使用“this”与自调用函数结合以获得相同的结果。

答案 1 :(得分:1)

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

如果要测试在另一个文件中声明的局部变量的值,最好的办法是将该文件的内容读入一个字符串(或许使用fs.readFileSync),然后{{1}字符串,应该在当前范围内定义变量。

只有在文件的最外层范围内声明局部变量时,才会有效。例如,如果它是函数内部的局部变量,那么你运气不好(除非你想做一些粗略的字符串解析,这会扩展理智的范围)。