使用sh测试用户脚本

Testing a user script with sh

本文关键字:脚本 用户 测试 sh 使用      更新时间:2024-01-22

我有一个用户脚本(希望是跨浏览器兼容的,尽管目前我正在Tampermonkey上运行它),我正在尝试设置一个测试套件。或者更确切地说,试着看看我在创建测试套件时采取的方法是否合理,以及我是否应该/可以采取不同的做法。

用户脚本非常简单:定义一堆函数,然后调用其中一个函数来完成它的工作。为了在<a href="https://nodejs.org/">node</a>中检查它,我想定义函数,但避免运行初始函数(因为没有浏览器来处理DOM属性)。所以我运行了这个丑陋的shell脚本(希望相当兼容;我在dash上运行它):

#!/bin/dash
grep -ev '^'s*stuff's*'('s*')'s*;?'s*($|//)' oeis-tools.user.js > test-cat.js
./getFunctions.sh >> test-cat.js
cat test.js >> test-cat.js
nodejs test-cat.js
rm test-cat.js

所以,基本上,我去掉了调用函数的那一行,用测试脚本cat它,然后将它传递给节点。在测试脚本中,我有一个类似断言的函数

function shouldBe(func, args, desiredResults) {
    totalTests++;
    tested.push(func.name);
    var actualResult = func.apply(null, args);
    if (isIn(actualResult, desiredResults)) return;
    console.log('Called ' + func.name + '(' + args.map(disp).join(', ') + ')');
    if (desiredResults.length === 1) {
        console.log(''tExpected ' + disp(desiredResults[0]));
    } else {
        console.log(''tExpected ' + desiredResults.map(disp).join(' or '));
    }
    console.log(''tGot      ' + disp(actualResult));
    failedTests++;
}

这使我可以调用形式为CCD_ 4的测试。(我省略了各种辅助函数的定义,但它们的精确定义在这里应该无关紧要。)

好的一面是,这让我可以快速编写测试,并且不影响用户脚本(没有测试负担)。但这似乎很古怪。有更好的方法吗?

编辑:(将测试函数放在单独文件中的建议的答案更改)

由于DOM的存在是stuff()函数的先决条件,因此可以将最后进行的调用封装在if语句中,该语句检查DOM的存在。

if (document) {
    stuff();
}

或者,更好的是,由于函数只在一个地方调用,

if (document) {
    /* code of stuff() */
}