diff --git a/README.md b/README.md index 98cc929..ed5165d 100644 --- a/README.md +++ b/README.md @@ -378,6 +378,24 @@ requests: expect: "<$ '2019-10-10' | date('YYYY') $>" ``` +## Sending JSON requests from external files + +If you have a JSON file that represents the body of your request, you can use the `json` option. + +Strest will read the JSON file you have specified and add it to the body of the request, you won't even need to worry about the Content-Type header, Strest will take care of that for you. + +```yaml +version: 2 + +requests: + jsonfile: + request: + url: https://postman-echo.com/post + method: POST + json: tests/success/jsonfile/data.json # You have to put the whole path relative to the current directory that you run strest + log: true +``` + ## Sending files and form data Sending files and form data is easy, use params type in the postData prop. ```yaml diff --git a/package.json b/package.json index b58a56f..4c211cb 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@strest/cli", - "version": "2.4.1", + "version": "2.5.0", "description": "A new dimension of REST API testing", "main": "dist/main.js", "repository": "https://github.com/eykrehbein/strest", diff --git a/src/configSchema.ts b/src/configSchema.ts index e3d41ba..16e78d3 100644 --- a/src/configSchema.ts +++ b/src/configSchema.ts @@ -58,6 +58,7 @@ const requestSchema = Joi.object().keys({ headers: Joi.array().items(headerSchema).optional(), queryString: Joi.array().items(queryStringSchema).optional(), cookies: Joi.array().items(cookieSchema).optional(), + json: Joi.string().optional(), }) const validateSchema = Joi.object().keys({ @@ -121,6 +122,7 @@ interface requestObjectSchema { headers: Array, queryString: Array, cookies: cookiesObjectSchema, + json?: string, } interface queryStringObjectSchema { diff --git a/src/test.ts b/src/test.ts index 08107f6..b811c08 100644 --- a/src/test.ts +++ b/src/test.ts @@ -438,6 +438,13 @@ const performRequest = async (requestObject: requestsObjectSchema, requestName: } } + if (requestObject.request.json !== undefined) { + axiosObject.headers["Content-Type"] = 'application/json' + const file = requestObject.request.json; + const json = jsonfile.readFileSync(file); + axiosObject.data = json; + } + try { let axiosInstance = axios.create({ validateStatus: function (status) { diff --git a/tests/success/Value/moment.strest.yml b/tests/success/Value/moment.strest.yml index 389b49b..a07e07c 100644 --- a/tests/success/Value/moment.strest.yml +++ b/tests/success/Value/moment.strest.yml @@ -10,7 +10,7 @@ requests: value: <$ now | date('YYYY') $> validate: - jsonpath: content.args.foo - expect: "<$ '2019-10-10' | date('YYYY') $>" + expect: "<$ '2020-10-10' | date('YYYY') $>" moment-in-validate: request: url: https://postman-echo.com/time/format?timestamp=2019-10-10&format=YYYY diff --git a/tests/success/jsonfile/data.json b/tests/success/jsonfile/data.json new file mode 100644 index 0000000..86a346c --- /dev/null +++ b/tests/success/jsonfile/data.json @@ -0,0 +1,3 @@ +{ + "success": true +} \ No newline at end of file diff --git a/tests/success/jsonfile/jsonfile.strest.yml b/tests/success/jsonfile/jsonfile.strest.yml new file mode 100644 index 0000000..6f34dca --- /dev/null +++ b/tests/success/jsonfile/jsonfile.strest.yml @@ -0,0 +1,8 @@ +version: 2 + +requests: + jsonfile: + request: + url: https://postman-echo.com/post + method: POST + json: tests/success/jsonfile/data.json # You have to put the whole path relative to the current directory that you run strest