用shtesting一个用户脚本

我有一个用户脚本(希望跨浏览器兼容,但目前我在Tampermonkey上运行它),我试图build立一个testing套件。 或者说,试图看看我在创build一个testing套件时采取的方法是否合理,如果我应该/可以以不同的方式做。

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

 #!/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 

所以我基本上放弃了函数被调用的那一行,用一个testing脚本来cat它,然后把它传递给节点。 在testing脚本中,我有一个类似assert的函数

 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++; } 

这让我可以调用forms为shouldBe(functionToTest, [firstInput, secondInput, etc], [correctOutput, otherCorrectOutput]) 。 (我忽略了各种帮助函数的定义,但是它们的准确定义在这里应该不重要。)

从好的方面来说,这可以让我快速写出testing,并保持脚本不变(没有testing行李)。 但是,这似乎很hacky。 有更好的方法吗?

编辑:(改变从推荐的testingfunction在单独的文件中的答案)

由于DOM的存在是你的stuff()函数的先决条件,所以你可以把你最后的调用包装在if语句中,以检查DOM的存在。

 if (document) { stuff(); } 

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

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