const test = require('node:test') const assert = require('node:assert/strict') const fs = require('node:fs') const path = require('node:path') const { validateWxss } = require('./checkWxss.cjs') test('WXSS 检查阻止通配选择器和无明确元素的结构伪类', () => { assert.throws(() => validateWxss('.zodiac-body > * { flex-shrink: 0; }', 'my'), /通配选择器/) assert.throws(() => validateWxss('.tg-panel-heading > :last-child { flex: 1; }', 'detail'), /结构伪类/) assert.doesNotThrow(() => validateWxss('.zodiac-summary, .zodiac-large { flex-shrink: 0; } .card:first-child { margin: 0; }', 'valid')) }) test('所有业务 SCSS 编译后不含上述微信不兼容选择器', () => { const sass = require(require.resolve('sass', { paths: [require.resolve('@tarojs/webpack5-runner')] })) const source = path.resolve(__dirname, '../src') let count = 0 function check(folder) { for (const entry of fs.readdirSync(folder, { withFileTypes: true })) { const file = path.join(folder, entry.name) if (entry.isDirectory()) check(file) else if (file.endsWith('.scss')) { validateWxss(sass.renderSync({ file }).css.toString(), path.relative(source, file)) count++ } } } check(source) assert.ok(count >= 10) })