Javascript 使用sh测试用户脚本

Javascript 使用sh测试用户脚本,javascript,node.js,testing,sh,userscripts,Javascript,Node.js,Testing,Sh,Userscripts,我有一个用户脚本(希望是跨浏览器兼容的,尽管目前我正在Tampermonkey上运行它),我正在尝试设置一个测试套件。 或者更确切地说,试着看看我在创建测试套件时采用的方法是否合理,以及我是否应该/能够以不同的方式来做 用户脚本非常简单:定义一组函数,然后调用其中一个函数来完成工作。要在中检查它,我想定义函数,但避免运行初始函数(因为没有浏览器来处理DOM属性)。所以我运行这个丑陋的shell脚本(希望相当兼容;我在dash上运行它): 因此,基本上我删除了调用函数的行,catit和一个测试脚本

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

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

因此,基本上我删除了调用函数的行,
cat
it和一个测试脚本,然后将它传递给node。 在测试脚本中,我有一个类似断言的函数

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++;
}
这让我可以调用形式为
shouldBe(functionToTest、[firstInput、secondInput等]、[correctOutput、otherCorrectOutput])
的测试。 (我省略了各种辅助函数的定义,但它们的精确定义在这里并不重要。)

从好的方面来说,这让我能够快速编写测试,并保持用户脚本不变(没有测试负担)。但它看起来很粗糙。有更好的方法吗?

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

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

if (document) {
    stuff();
}
或者,更好的是,因为函数只在一个地方被调用

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

DOM属性是什么意思?您能否将代码发布到要通过此脚本删除其调用的函数?可能有一种方法可以模拟或填充您请求的DOM属性。@Compynerd255:它有点长,而且非常混乱,因为底层页面是标记汤。事实上,这是一个要点——该站点将很快重新设计,我将不得不重写所有和DOM相关的代码。但我并不太担心这部分的错误,大多数错误发生在我从DOM相关代码中分离出来的更有趣的部分(实际上更多的是因为这是正确的做法,而不是为了测试,但这是一个方便的副作用)。@Compynerd255:如果你真的愿意,我可以转储文件(大约一千行)到pastebin之类的,但我不想吓跑那些看到巨大代码并认为我在要求他们调试它的人。@Compynerd255:给你:@Compynerd255:这是测试代码:这是一个用户脚本,所以它需要在一个文件中工作。@Charles编辑了答案以支持单文件执行。
if (document) {
    /* code of stuff() */
}