В настоящее время я работаю над созданием сквозного тестирования для API, над которым работает другая команда, и мне было интересно, если кто-нибудь знает о библиотеке JS, которую я мог бы использовать, чтобы проверить, возвращается ли дополнительное поле в теле ответа HTTP? Целью этой функциональности будет информирование команды QA, когда команда разработчиков вносит изменения в API с помощью тестов, вместо того, чтобы разработчики вручную сообщали нам, что они создали обновления. Я знаю, что это можно реализовать вручную, но если колесо уже существует, я бы предпочел не создавать его заново.
Пример сценария:
Вызов API: GET user - возвращает: имя пользователя, идентификатор пользователя и день рождения пользователя.
С предложенной функциональностью, если команда разработчиков произвела обновления для вызова пользователя Get, и она возвращает следующее - return: имя пользователя, идентификатор пользователя, день рождения пользователя и адрес пользователя.
Тест не дал бы мне знать, что дополнительное поле, которое не ожидалось (адрес пользователя), было возвращено.
Проверка схемы, кажется, то, что вы ищете. Помимо библиотеки, упомянутой в другом ответе, вы также можете проверить аналогичный: joi
const Joi = require('joi');
const schema = Joi.object().keys({
userName: Joi.string().alphanum().required(),
userId: Joi.number().required(),
userBirthDay: Joi.number().required(),
})
const result = Joi.validate({
userName: 'johndoe',
userId: 1234567,
userBirthDay: 1970,
userAddress: 'John Doe St.'
}, schema);
if (result.error) {
console.log(result.error.details);
}
В спецификации вы можете сделать утверждение о существовании ключа error
в объекте result
используя выбранную вами библиотеку утверждений. В приведенном выше примере предполагается, что вы используете nodejs в качестве среды для запуска тестов, но также существует версия joi для браузера: joi-browser
Вам нужна проверка схемы, есть библиотеки вроде ajv.
var ajv = new Ajv({ allErrors: true }); // options can be passed, e.g. {allErrors: true}
// API call: GET user - returns : user name, user ID and user birthday.
// With proposed functionality, if the dev team made updates to the Get user call, and it returns the following - return : user name, user ID, user birthday AND user address.
var schema = {
type: "object",
properties: {
userName: {
type: "string",
},
userId: {
type: "string",
},
userBirthdate: {
type: "string",
},
},
required: ["userName", "userId", "userBirthdate"],
additionalProperties: false,
};
var validate = ajv.compile(schema);
var validUser = {
userName: "John",
userId: "john",
userBirthdate: "01012000",
};
var invalidUser = {
userName: "John",
userId: "john",
userBirthdate: "01012000",
userAddress: "World",
};
var valid = validate(validUser);
console.log('Valid user is valid: ${valid}');
valid = validate(invalidUser);
console.log('Invalid user is valid: ${valid}');
console.log('Validate errors:', validate.errors);
<script src="https://cdnjs.cloudflare.com/ajax/libs/ajv/6.6.2/ajv.min.js"></script>
Fetch
? В нем должно быть все необходимое для этого, если возможно :)