如何检查 bash 条件语句中“npm run test”的结果

Str*_*ch0 5 bash

我有一个部署脚本,我只想在测试成功时运行,但我相信我的条件语句有问题if [ "$VALID" ]

\n\n
#!/bin/bash\n\n# install dependencies\necho \'INSTALLING YARN\'\nnpm install yarn -g\n\necho "INSTALLING DEPENDENCIES"\nyarn install\n\necho "TESTING"\nVALID="$(npm test)"\n\nif [ "$VALID" ]\n    then    \n\n    # ZIP up the code\n    echo \'INSTALLING ZIP\'\n    apt-get update\n    echo "y" | apt-get install zip\n\n    echo \'ZIPPING\'\n    zip -r ./Lambda-Image-Compression.zip index.js node_modules\n\n    # install aws cli so we can deploy code\n    echo \'INSTALLING PIP\'\n    # echo "y" | apt-get install python-pip\n    echo "y" | apt-get install python-pip python-dev build-essential \n    echo "y" | pip install --upgrade pip \n    # echo "y" | sudo pip install --upgrade virtualenv \n\n    echo \'INSTALLING AWSCLI\'\n    pip install awscli\n\n    # Copy config file to root so AWS config & credentials are set\n    echo \'MAKING AWS CREDENTIALS\'\n    CREDENTIALS="[default]\n    aws_access_key_id = $AWS_ACCESS_KEY_ID\n    aws_secret_access_key = $AWS_SECRET_ACCESS_KEY"\n\n    touch .aws/credentials\n    "$CREDENTIALS" > .aws/credentials\n\n    echo "MOVING AWS CONFIG"\n    cp -R .aws ~/.\n\n    # Upload to AWS\n    echo \'UPDATING LAMBDA FUNCTION\'\n    aws lambda update-function-code \\\n    --function-name resizeHandler \\\n    --zip-file fileb://Lambda-Image-Compression.zip \\\n    --region ap-southeast-2\n\nfi\n
Run Code Online (Sandbox Code Playgroud)\n\n

如果成功的话我的测试结果如下:

\n\n
> Lambda-Image-Compression@1.0.0 test \n> mocha\n\n  myLambda\nRUNNING OPTIMSATION\ndownload\ndownloadImage: 69.381ms\nEnd of step null\n    \xe2\x9c\x93 Should move testImage.png from srcBucket to dstBucket and return true (286ms)\n\n\n  1 passing (299ms)\n
Run Code Online (Sandbox Code Playgroud)\n\n

失败显示如下:

\n\n
TEST RESULT:\n\n> Lambda-Image-Compression@1.0.0 test\n> mocha\n\n  myLambda\nRUNNING OPTIMSATION\ndownload\n    1) Should move testImage.png from srcBucket to dstBucket and return true\n\n\n  0 passing (22ms)\n  1 failing\n\n  1) myLambda Should move testImage.png from srcBucket to dstBucket and return true:\n     ReferenceError: s3 is not defined\n      at download (index.js:32:4)\n      at nextTask (node_modules/async/dist/async.js:5273:14)\n      at Object.waterfall (node_modules/async/dist/async.js:5283:5)\n      at exports.handler (index.js:24:8)\n      at error (node_modules/lambda-tester/lib/runner.js:151:25)\n      at Promise.resolve.then (node_modules/lambda-tester/lib/runner.js:138:24)\n
Run Code Online (Sandbox Code Playgroud)\n

l'L*_*L'l 5

你可以做一些类似的事情:

VALID="$(npm test | grep -o 'failing')"
Run Code Online (Sandbox Code Playgroud)

进而:

if [[ $VALID != "failing" ]] ...
Run Code Online (Sandbox Code Playgroud)

另一种方法是选择“0 pass”:

VALID="$(npm test | grep -o '  0 passing')"
Run Code Online (Sandbox Code Playgroud)

对于条件式:

if [[ $VALID != "  0 passing" ]] ...
Run Code Online (Sandbox Code Playgroud)

在任何一种情况下,如果在返回的字符串中找到“失败”或“0 通过”一词,则表明测试失败。关键是找到通过/失败输出的独特之处。

注意:仔细研究输出;“0 通过”字符串并不是万无一失的,因为从技术上讲您可以进行 10 次测试... grep 会看到“10 通过”并将其误认为是失败。也许您没有那么多测试,但一定要注意它,或者包括导致它的确切空格数。