Files
SmartScale_MODBUS_Woer/tests/scale-utils.test.mjs
T

45 lines
1.5 KiB
JavaScript

import assert from "node:assert/strict";
import test from "node:test";
import {
createFileTimestamp,
evaluateStability,
formatWeight,
parseScaleMessage,
} from "../app/scale-utils.ts";
test("电子秤消息统一转换为千克", () => {
assert.equal(parseScaleMessage("2.49"), 2.49);
assert.equal(parseScaleMessage('{"weight":2490,"unit":"g"}'), 2.49);
assert.equal(parseScaleMessage('{"weightKg":2.49}'), 2.49);
assert.ok(Math.abs(parseScaleMessage('{"value":2.20462262,"unit":"lb"}') - 1) < 1e-9);
});
test("电子秤消息拒绝非法数据", () => {
assert.equal(parseScaleMessage(""), null);
assert.equal(parseScaleMessage("-1"), null);
assert.equal(parseScaleMessage('{"weight":"abc"}'), null);
assert.equal(parseScaleMessage('{"weight":1,"unit":"oz"}'), null);
});
test("连续相同读数可完成稳定判断", () => {
assert.deepEqual(evaluateStability([2.49, 2.49, 2.49, 2.49, 2.49]), {
stable: false,
progress: 70,
});
assert.deepEqual(evaluateStability([2.49, 2.49, 2.49, 2.49, 2.49, 2.49]), {
stable: true,
progress: 100,
});
assert.equal(evaluateStability([2.4, 2.5, 2.42, 2.51, 2.43, 2.5]).stable, false);
});
test("重量格式和文件时间戳符合终端规范", () => {
assert.equal(formatWeight(2.486, "kg"), "2.49");
assert.equal(formatWeight(2.486, "g"), "2486.00");
assert.equal(formatWeight(Number.NaN, "kg"), "0.00");
const localTime = new Date(2026, 6, 28, 16, 9, 5).toISOString();
assert.equal(createFileTimestamp(localTime), "20260728160905");
});