我有一个部署脚本,我只想在测试成功时运行,但我相信我的条件语句有问题if [ "$VALID" ]
#!/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\nRun 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)\nRun Code Online (Sandbox Code Playgroud)\n\n失败显示如下:
\n\nTEST 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)\nRun Code Online (Sandbox Code Playgroud)\n
你可以做一些类似的事情:
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 通过”并将其误认为是失败。也许您没有那么多测试,但一定要注意它,或者包括导致它的确切空格数。
| 归档时间: |
|
| 查看次数: |
3993 次 |
| 最近记录: |