从命令行测试JavaScript代码

4
作为一个JavaScript的初学者,我很难理解如何“加载”我的代码,以便在应用程序之外使用单元测试进行测试。
在PHP中,我有一个自动加载器(composer),所以我可以引用我想要交互的类,并且它会自动加载,或者我可以使用require_once来包含一个物理文件,那个文件中的类或函数就可以被我使用。
因此,其中一个类(存储在文件src/lib/App/Calculator.js中)...
App.Calculator = (function () {

    var Calculator = function (onUpdateCallback) {
        this.amountChange = 0.00;
        this.amountDue = 0.00;
        this.amountTendered = 0.00;
        this.onUpdateCallback = onUpdateCallback;
    };

    Calculator.prototype = {
        clear: function () {
            this.amountTendered = 0.00;
            this.calculate();
        },

        calculate: function () {
            if (this.amountDue > 0) {
                this.amountChange = Math.max(0, this.getAmountTendered() - this.amountDue);
            } else {
                this.amountChange = -(this.getAmountTendered() + this.amountDue);
            }

            if (typeof this.onUpdateCallback === 'function') {
                this.onUpdateCallback(this);
            }
        },

        getAmountTendered: function () {
            return Number(this.amountTendered);
        },

        getChange: function () {
            return this.amountChange;
        },

        setAmountTendered: function (amountTendered) {
            this.amountTendered = parseFloat(amountTendered);
            this.calculate();
        },

        setAmountDue: function (amountDue) {
            this.amountDue = parseFloat(amountDue);
            if (this.amountDue < 0) {
                this.negative = true;
            }
            this.calculate();
        }
    };

    return Calculator;

})();

我希望能够在应用程序之外,从命令行创建一个新的App.Calculator实例并进行测试。

从PHPUnit转到JS,我知道我缺乏很多理解,所以任何指导意见(有偏见或无偏见)都将不胜感激。


如果您只是在浏览器中打开您的网站,您应该能够访问 App.Calculator,并对其进行所需的操作。 - Cerbrus
打开你的应用程序到浏览器 -> f12 -> sources -> 找到JS文件并在你的类中放置尽可能多的断点,然后重新加载页面。或者f12 -> var calc = App.calculator(); calc.getChange(); ...无论你想在你的类上测试什么都可以。 - Roumelis George
@RoumelisGeorge 这个问题是关于运行单元测试的。不涉及调试代码或在浏览器中手动测试。 - k0pernikus
我在我的Node.js项目中使用mocha / chai。关于在这些测试中导入代码,我建议使用基于模块的方法,请参见:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/import 如果代码旨在在浏览器中运行,则可能需要使用像babel或bundler这样的转译器,如webpack。 - k0pernikus
由于导入类似乎是问题所在:大多数测试框架都在Node上运行,并使用CommonJS模块格式。请在Node API文档中了解更多关于Node.js和模块的信息。本地模块需要使用以./../开头的相对路径。 - Herku
显示剩余2条评论
1个回答

3

最好的方法是使用F12调试命令行在浏览器中测试您的代码。

如果您想在实际的命令行中执行测试,那么另一个选择是使用Node.JS。这实际上是javascript的后端应用程序,您可以将代码粘贴到一个 .js 文件中,然后使用CMD命令: "node [yourfile.js]" 运行该文件。使用 console.log ,您可以记录到命令行。


1
“然后使用CMD命令” - 那对问题没有帮助。它不会做任何测试代码的事情。 - Quentin
1
我正在尝试自动化测试运行。有几百个类。这只是一个例子。我们在流水线中使用PHPUnit进行测试,测试超过20,000个测试。现在我们想对JS代码进行一些测试。我们都不是专家,所以我们知道我们需要学习一些东西。浏览器不应该参与其中。 - Richard A Quadling
2
这个问题是关于测试套件的。不是关于通过日志驱动方法手动调试代码。单元测试!=在浏览器中进行测试。 - k0pernikus
此外,这个问题有点难回答。OP似乎没有运行node.js应用程序的经验,但想要测试几百个用Javascript编写的类。通常你会通过在评论中提问来解决这个问题,但是当你没有任何声望时这很困难。当你给出答案时,你会受到严重的负评。 - Herku
1
@RichardAQuadling 啊,使用 Node,你可以导入代码。你可以通过使用 require("./filename.js"); 来实现。在你想要导入的文件内,你需要在底部添加以下内容: module.exports = ,然后跟上你想要导出的内容。这可以是任何东西。如果你导入了该文件,它将包含你使用 module.exports 导出的任何内容。注意:如果你使用的函数不在 module.exports 中,它将不起作用,除非该函数由 module.exports 内部的代码调用。示例:https://gist.github.com/PauldeKoning/2077c08e80c38f79203825eefda7bd11 - Paul de Koning
显示剩余8条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接