Goh*_*wks 1 mocking promise jestjs
我读了Jest Mock Promise with Params并且具有基本相同的代码片段,但它不断向我抛出错误“ParameterNotFound”
\n\n// -- 测试代码 --
\n\n it("get parameter", async done => {\n const paramsForGetParam = {\n Name: "StripeSecretKey",\n WithDecryption: true\n };\n\n const mockedResponseData = {\n Parameter: {\n Name: "StripeSecretKey",\n Type: "SecureString",\n Value: "myVal",\n Version: 1,\n LastModifiedDate: 1530018761.888,\n ARN: "arn:aws:ssm:us-east-1:123456789012:parameter/helloSecureWorld"\n }\n };\n\n // ssm.getParameter().promise = jest.fn();\n ssm.getParameter = jest.fn();\n ssm.getParameter.mockImplementation(() => ({\n promise: jest\n .fn()\n .mockImplementation(() => Promise.resolve(mockedResponseData))\n }));\n ssm\n .getParameter()\n .promise.mockImplementation(() => Promise.resolve(mockedResponseData));\n\n const data = await helpers.getSsmVar("StripeSecretKey");\n expect(data).toEqual(mockedResponseData.Parameter.Value);\n expect(ssm.getParameter).toHaveBeenCalledTimes(1);\n done();\n });\nRun Code Online (Sandbox Code Playgroud)\n\n这是我的开发代码:
\n\nconst aws = require("aws-sdk");\naws.config.update({ region: "us-east-1" });\nconst ssm = new aws.SSM();\nconst baseSsm = `/mybox/`;\n\nmodule.exports = {\n getSsmVar: async function(name) {\n var params = {\n Name: baseSsm + name,\n WithDecryption: true\n };\n var request = await ssm.getParameter(params).promise();\n return request;\n }\n};\n\nRun Code Online (Sandbox Code Playgroud)\n\n但它一直失败,并没有告诉我找不到哪个参数。aws 说要检查名称参数,但我认为名称(params.Name)是正确的?
\n\n \xe2\x97\x8f Helpers Tests \xe2\x80\xba get parameter\n\n ParameterNotFound: \n\n at Request.extractError (node_modules/aws-sdk/lib/protocol/json.js:50:27)\n at Request.callListeners (node_modules/aws-sdk/lib/sequential_executor.js:112:20)\n at Request.emit (node_modules/aws-sdk/lib/sequential_executor.js:77:10)\n at Request.emit (node_modules/aws-sdk/lib/request.js:713:14)\n at Request.transition (node_modules/aws-sdk/lib/request.js:25:10)\nRun Code Online (Sandbox Code Playgroud)\n
这是解决方案,您可以使用jest.mock()mockaws-sdk。
index.js:
const aws = require(\'aws-sdk\');\naws.config.update({ region: \'us-east-1\' });\nconst ssm = new aws.SSM();\nconst baseSsm = `/mybox/`;\n\nmodule.exports = {\n async getSsmVar(name) {\n const params = {\n Name: baseSsm + name,\n WithDecryption: true\n };\n const request = await ssm.getParameter(params).promise();\n return request;\n }\n};\nRun Code Online (Sandbox Code Playgroud)\n\nindex.spec.js:
jest.mock(\'aws-sdk\', () => {\n const mockedSSM = {\n getParameter: jest.fn().mockReturnThis(),\n promise: jest.fn()\n };\n const mockedConfig = {\n update: jest.fn()\n };\n return {\n SSM: jest.fn(() => mockedSSM),\n config: mockedConfig\n };\n});\n\nconst helpers = require(\'.\');\nconst aws = require(\'aws-sdk\');\nconst ssm = new aws.SSM();\n\ndescribe(\'helpers\', () => {\n it(\'get parameter\', async () => {\n const mockedResponseData = {\n Parameter: {\n Name: \'StripeSecretKey\',\n Type: \'SecureString\',\n Value: \'myVal\',\n Version: 1,\n LastModifiedDate: 1530018761.888,\n ARN: \'arn:aws:ssm:us-east-1:123456789012:parameter/helloSecureWorld\'\n }\n };\n\n ssm.getParameter().promise.mockResolvedValueOnce(mockedResponseData);\n const data = await helpers.getSsmVar(\'StripeSecretKey\');\n expect(data).toEqual(mockedResponseData);\n expect(ssm.getParameter).toBeCalledWith({ Name: `/mybox/StripeSecretKey`, WithDecryption: true });\n expect(ssm.getParameter().promise).toBeCalledTimes(1);\n });\n});\nRun Code Online (Sandbox Code Playgroud)\n\n100%覆盖率的单元测试结果:
\n\n PASS src/stackoverflow/56821395/index.spec.js\n helpers\n \xe2\x9c\x93 get parameter (8ms)\n\n----------|----------|----------|----------|----------|-------------------|\nFile | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s |\n----------|----------|----------|----------|----------|-------------------|\nAll files | 100 | 100 | 100 | 100 | |\n index.js | 100 | 100 | 100 | 100 | |\n----------|----------|----------|----------|----------|-------------------|\nTest Suites: 1 passed, 1 total\nTests: 1 passed, 1 total\nSnapshots: 0 total\nTime: 3.872s\nRun Code Online (Sandbox Code Playgroud)\n\n这是完成的演示:https://github.com/mrdulin/jest-codelab/tree/master/src/stackoverflow/56821395
\n| 归档时间: |
|
| 查看次数: |
4209 次 |
| 最近记录: |