评估帮助程序与测试文件的上下文相同

时间:2016-09-11 22:04:34

标签: javascript node.js jasmine eval

我想测试我制作的原型函数。

我的设置包含3个文件:

  • Base.js - 基本文件,我的所有第二个文件都有共同点

    function prop(to, name, func) {
        Object.defineProperty(to.prototype, name, {
            value: func,
            writable: true,
            configurable: true
        });
        return func;
    }
    
  • Array.js - 修改给定Object原型的文件。

    prop(Array, 'hasPresent', function(what) {
        return !!~this.indexOf(what)
    });
    
  • /tests/Array.js - 测试自己

    describe('hasPresent()',function(){
        it('number', function(done){
            expect([0,1,2].hasPresent(0)).toBe(true)
            done()
        })
    })
    

所有这些都是从nodeJS完成的,它监视文件的变化。我担心的是,它会从第二个文件(prop is not defined ... at Array.js:1)返回错误。这告诉我,这些文件不会在相同的上下文中进行评估。有没有办法让这项工作?或者从节点启动时如何在测试文件中获取__direcotory变量。

我在nodejs中的设置:

jasmine.loadConfig({
    spec_files: ['Base.js','Array.js']
    helpers: ['Base.js','Array.js']
})

jasmine.execute(['tests/Array.js']);

PS:我尝试将eval放在tests/Array.js中,但加载后忘记了工作目录,所以我必须使用绝对路径,如果有办法解决这个问题,那就太好了。

1 个答案:

答案 0 :(得分:0)

您只需要使用Node.js的常规模块机制:https://nodejs.org/api/modules.html

以下是您可以适应测试的基本示例:

foo.js的内容:

const circle = require('./circle.js');
console.log(`The area of a circle of radius 4 is ${circle.area(4)}`);

circle.js的内容:

const PI = Math.PI;
exports.area = (r) => PI * r * r;
exports.circumference = (r) => 2 * PI * r;