我正在使用shunit2单元测试框架进行一些基本的单元测试。 我在函数的第一行收到了“意外令牌`nodeError = $(node“ node_fake_returns / return_error.js”)附近的语法错误”错误。功能如下:
function testHandleNodeReturnError{
nodeError=$( node "./node_fake_returns/return_error.js" )
if [ grep -i "Error" <<< "$nodeError" ]; then
assertTrue "true"
fi
}
假设运行一个节点脚本,该脚本将错误消息返回到stdout,然后将该输出分配给变量。函数中只有第一行很重要。
我对bash还是很陌生,我已经弄混了这一行的格式,大多只是在不同位置添加空格,但是我似乎找不到导致语法错误的原因。这可能很简单,但是如果有人可以告诉我什么地方可能出了问题,我将非常感激。
谢谢!
答案 0 :(得分:1)
通过将您的代码粘贴到shellcheck上,我留下了:
function testHandleNodeReturnError{
^-- SC1095: You need a space or linefeed between the function name and body.
这很直白。你在那里需要一个空间。
函数testHandleNodeReturnError
使用function
关键字是deprecated。只需使用function_name() { function_body; }
。
if [grep -i“错误” <<<“ $ nodeError”];然后
这是非常错误的。这会将nodeError
变量的内容输出到[
命令的标准输入。 [
是命令,是可执行文件,就像grep
一样,它是test
程序的别名。然后它将[
与grep
,-i
,"Error"
和]
用作其4个参数。你不要那样如果要检查Error
字符串,只需使用grep
的退出状态:
也是这样:
testHandleNodeReturnError() {
nodeError=$(node "./node_fake_returns/return_error.js")
if grep -q -i "Error" <<<"$nodeError"; then
assertTrue "true"
fi
}