Files
zszq-trs/YLErpWeb/fe-tests/percentColumnText.test.js
T
hjhan 0ff7375696 refactor(web): 百分比列展示嗅探一行式显式化——6处逐字重复抽PercentColumnText纯函数
structure.js×3/structure_dz.js/tradeEditV2.js/tradeEditGroup.js的setExtendInfo里同一行式:靠indexOf("%")>0嗅探值是否已带%,决定原样展示还是×100加%。抽为app/trade/percentColumnText.js纯函数(UMD,jest可测),表达式逐字符等价——含>0而非>=0、空值回退ColumnDefaultValue、回退源也无值时NaN%等历史行为全部被7个特征测试冻结(TDD:测试先红后绿)。四个页面cshtml在tradeHelper后补脚本序;jest覆盖率清单纳入。fe-tests 326/326通过
2026-08-22 07:46:58 +08:00

49 lines
3.1 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/**
* percentColumnText.js 特征测试(characterization)——冻结散落 6 处的逐字相同一行式:
* value: item.ColumnType !== 4 || (item.value || item.ColumnDefaultValue + "").indexOf("%") > 0
* ? ((item.value || item.ColumnDefaultValue) + "")
* : (((item.value || item.ColumnDefaultValue) * 100) + "%")
* 【业务约定显式化】ColumnType==4 是"百分比列":值以小数形式存(0.05),展示时 ×100 加 %;
* 若值文本已含 %(手输/后端已格式化)则原样展示,不做二次换算。
*/
const PercentColumnText = require('../wwwroot/Scripts/app/trade/percentColumnText.js');
describe('PercentColumnText.displayText 百分比列展示文本', () => {
test('非百分比列(ColumnType!=4)原样字符串化', () => {
expect(PercentColumnText.displayText({ value: '0.05', ColumnDefaultValue: '0.1', ColumnType: 0 })).toBe('0.05');
expect(PercentColumnText.displayText({ value: 'abc', ColumnDefaultValue: 'x', ColumnType: 1 })).toBe('abc');
});
test('百分比列小数值×100加%', () => {
expect(PercentColumnText.displayText({ value: '0.05', ColumnDefaultValue: '', ColumnType: 4 })).toBe('5%');
expect(PercentColumnText.displayText({ value: '0.125', ColumnDefaultValue: '', ColumnType: 4 })).toBe('12.5%');
expect(PercentColumnText.displayText({ value: '5', ColumnDefaultValue: '', ColumnType: 4 })).toBe('500%');
});
test('百分比列值已含%则原样(不做二次换算)', () => {
expect(PercentColumnText.displayText({ value: '5%', ColumnDefaultValue: '', ColumnType: 4 })).toBe('5%');
expect(PercentColumnText.displayText({ value: '0.30%', ColumnDefaultValue: '', ColumnType: 4 })).toBe('0.30%');
});
test('value为空回退ColumnDefaultValue', () => {
expect(PercentColumnText.displayText({ value: '', ColumnDefaultValue: '0.2', ColumnType: 4 })).toBe('20%');
expect(PercentColumnText.displayText({ value: '', ColumnDefaultValue: '2%', ColumnType: 4 })).toBe('2%');
expect(PercentColumnText.displayText({ value: null, ColumnDefaultValue: '0.2', ColumnType: 0 })).toBe('0.2');
});
test('quirk冻结: 回退源也无值时得到NaN%(undefined*100)', () => {
// 原一行式同款行为:raw=undefined → undefined*100+'%' = 'NaN%'
expect(PercentColumnText.displayText({ value: '', ColumnDefaultValue: undefined, ColumnType: 4 })).toBe('NaN%');
});
test('quirk冻结: %恰在首位(indexOf=0不>0)仍走×100路径', () => {
// 原式用 >0 而非 >=0'%'→'NaN%'。真实值从不以%开头,此测试仅钉住边界语义
expect(PercentColumnText.displayText({ value: '%', ColumnDefaultValue: '', ColumnType: 4 })).toBe('NaN%');
});
test('输入契约: value为非空数字时与原式同样抛TypeError(调用方须传字符串或空值)', () => {
// 原式 (item.value||...).indexOf 对数字直接TypeError——提取版保持一致,不做静默兜底
expect(() => PercentColumnText.displayText({ value: 0.05, ColumnDefaultValue: '', ColumnType: 4 })).toThrow(TypeError);
});
});