/** * 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); }); });