【问题标题】:How to export and import two different function objects in JavaScript?如何在 JavaScript 中导出和导入两个不同的函数对象?
【发布时间】:2016-11-14 13:01:15
【问题描述】:

我使用 Jasmine-Node 来测试 Javascript 代码。

如何导出两个不同的函数对象,如 Confusions1 和 Confusions2,以便它们都可以在 Jasmine-Node 测试文件中使用?

我的尝试如下所示:

// confusions.js
var Confusions1 = function() {};

Confusions1.prototype.foo = function(num) {
        // keep track of how many times `foo` is called
        this.count++;
}

module.exports = Confusions1;

// second function object

var Confusions2 = function() {};

Confusions2.prototype.foo = function() {
        var a = 2;
        this.bar(); 
};

Confusions2.prototype.bar = function() {
        return this.a;
}

module.exports = Confusions2;

还有我的 Jasmine 测试文件:

// confusions.spec.js

var Confusion = require('./confusions.js');

describe("chapter 1, common misconception ", function() {
        describe("to assume `this` refers to the function itself: ", function() {
                var confusion = new Confusion();

                // some test code omitted


        });

        describe("to assume `this` refers to the function's scope", function() {
                var confusion = new Confusion();

                // test code omitted

        });
});

我希望 confusions.js 中的 Confusions1 和 Confusions2 都可以在 confusions.spec.js 内的两个嵌套描述块中使用

我假设在需要文件var Confusion = require('./confusions.js'); 之后我必须以某种方式初始化不同的对象 var confusion1 = new Confusions1(); var confusion2 = new Confusions2(); 之类的东西,但究竟如何(不将两个对象拆分到两个单独的文件中)?

【问题讨论】:

    标签: javascript unit-testing jasmine-node


    【解决方案1】:

    因此,您希望有一个行为类似于导出值容器的模块,换句话说,您希望导出两个函数:

    // foo.js
    var Confusion1 = function() {}
    var Confusion2 = function() {}
    ...
    exports.Confusion1 = Confusion1
    exports.Confusion2 = Confusion2
    

    无论你在哪里需要这个模块,你都可以需要这样的东西:

    // bar.test.js
    var confusions = require('path-to-the-foo-file')
    console.log(confusions.Confusion1)
    console.log(confusions.Confusion2)
    

    此外,您似乎应该检查您正在使用的模块系统一般是如何工作的,请检查以下答案:module.exports vs exports in Node.js

    【讨论】:

    • 有没有办法在没有 jasmine-node 样板的情况下快速测试你的代码?当我用你的方法调整我的测试时,我得到一个 TypeError,因为 Confusion1/Confusion2 在测试中未定义......
    • 什么是节点样板?与任何测试框架无关,它只是关于节点模块系统。从上面创建两个模块并运行node bar.test.js
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-24
    • 2020-09-05
    • 2023-03-25
    • 2016-09-09
    • 2021-12-19
    • 2016-04-15
    相关资源
    最近更新 更多