29 lines
1.3 KiB
JavaScript
29 lines
1.3 KiB
JavaScript
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)
|
||
|
|
})
|