You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP转JS新手求助:如何从命令行加载JS代码并进行单元测试?

从PHP转JS:如何加载代码并做命令行单元测试

作为从PHP转过来的JS新手,这种“怎么加载代码做测试”的困惑太正常了!毕竟JS的模块系统和PHP的require_once/Composer自动加载确实不一样,我来一步步帮你搞定。

首先,你的Calculator类是用自执行函数挂在全局App对象上的,这种写法在浏览器里没问题,但Node.js(命令行环境)默认没有全局的App对象,所以我们得先解决代码的加载问题,再谈测试。

第一步:让你的代码能被Node.js加载

有两种方式,选哪种看你要不要保留浏览器兼容性:

方式1:修改代码支持双环境(浏览器+Node)

在你的Calculator.js文件最后,添加一段适配代码,既保留全局App,又支持Node的模块导出:

App.Calculator = (function () {
    // 原有的Calculator类代码...
})();

// 新增:适配Node.js模块系统
if (typeof module !== 'undefined' && module.exports) {
    module.exports = App.Calculator;
}

这样在浏览器里,它还是挂在App.Calculator上;在Node里,你可以用require直接导入这个类。

方式2:不修改原代码,在测试里模拟全局App

如果你不想动原代码,可以在测试文件里手动创建全局的App对象,再加载你的代码:

// 在测试文件开头模拟全局App
global.App = {};
// 加载Calculator代码,它会自动把类挂到App上
require('../src/lib/App/Calculator');
// 现在就能用App.Calculator了
const Calculator = App.Calculator;

第二步:用测试框架做单元测试(类似PHPUnit)

JS里常用的测试框架有Jest(上手简单)和Mocha(灵活),我以Jest为例,一步步来:

  1. 初始化项目:在项目根目录打开命令行,运行
npm init -y

这会生成package.json,类似PHP的composer.json。

  1. 安装Jest:
npm install --save-dev jest

--save-dev表示只在开发环境安装,类似PHP的require-dev。

  1. 写测试用例:在项目根目录创建tests文件夹,新建Calculator.test.js,内容如下(和PHPUnit的测试逻辑很像):
// 如果用方式1修改了代码,直接导入
const Calculator = require('../src/lib/App/Calculator');

// 如果用方式2,就先模拟全局再导入
// global.App = {};
// require('../src/lib/App/Calculator');
// const Calculator = App.Calculator;

describe('Calculator类测试', () => {
  let calculator;

  // 每个测试前都初始化一个新的Calculator实例
  beforeEach(() => {
    calculator = new Calculator();
  });

  test('初始化时默认值正确', () => {
    expect(calculator.getAmountTendered()).toBe(0.00);
    expect(calculator.getChange()).toBe(0.00);
  });

  test('当应付款为正数时,计算找零正确', () => {
    calculator.setAmountDue(10.50);
    calculator.setAmountTendered(20.00);
    expect(calculator.getChange()).toBe(9.50);
  });

  test('当应付款为负数时,计算逻辑正确', () => {
    calculator.setAmountDue(-5.00);
    calculator.setAmountTendered(10.00);
    expect(calculator.getChange()).toBe(-(10.00 + (-5.00))); // 即-5.00
  });
});
  1. 运行测试:在package.json里添加测试脚本,找到scripts部分改成:
"scripts": {
  "test": "jest"
}

然后命令行运行:

npm test

就能看到测试结果了,和PHPUnit的输出类似,会告诉你哪些测试通过,哪些失败。

第三步:不用框架,直接在命令行测试(快速验证)

如果只是想快速验证代码,不用测试框架也可以:

在项目根目录创建test.js,内容:

// 方式1:修改代码后
const Calculator = require('./src/lib/App/Calculator');

// 方式2:不修改代码
// global.App = {};
// require('./src/lib/App/Calculator');
// const Calculator = App.Calculator;

// 创建实例并测试
const calc = new Calculator();
calc.setAmountDue(15.00);
calc.setAmountTendered(25.00);
console.log('找零金额:', calc.getChange()); // 应该输出10.00

calc.clear();
console.log('清空后已付款:', calc.getAmountTendered()); // 应该输出0.00

然后命令行运行:

node test.js

就能看到输出结果了。

一些额外小提示

  • JS里的模块系统现在还有ES Modules(用import/export),不过Node默认还是CommonJS(require/module.exports),新手先从CommonJS入手更简单。
  • 如果你习惯了PHPUnit的断言,Jest的断言语法很直观,比如expect(value).toBe(expected)就类似PHPUnit的assertEquals。

内容的提问来源于stack exchange,提问作者Richard A Quadling

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:03:28