{"id":367466,"date":"2024-05-21T03:21:35","date_gmt":"2024-05-21T03:21:35","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=367466"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=367466","title":{"rendered":"<span>\u0420\u0430\u0437\u0431\u043e\u0440 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0438 \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432 \u0432 Insomnia<\/span>"},"content":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u0410\u0432\u0442\u043e\u0440: \u041d\u0430\u0434\u0435\u0436\u0434\u0430 \u0414\u0443\u0434\u043d\u0438\u043a  <\/p>\n<p>\u041f\u0430\u043c\u044f\u0442\u043a\u0430 \u0434\u043b\u044f \u0438\u043d\u0436\u0435\u043d\u0435\u0440\u043e\u0432 \u043f\u043e \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044e \u041f\u041e.<\/p>\n<p>\u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u044e \u0441\u0435\u0440\u0438\u044e \u0441\u0432\u043e\u0438\u0445 \u0441\u0442\u0430\u0442\u0435\u0439 \u043f\u0440\u043e Insomnia, \u043f\u0435\u0440\u0432\u0443\u044e \u0441\u0442\u0430\u0442\u044c\u044e \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u043f\u043e <a href=\"https:\/\/habr.com\/ru\/articles\/754154\/\" rel=\"noopener noreferrer nofollow\">\u0441\u0441\u044b\u043b\u043a\u0435<\/a>.<\/p>\n<p>\u0421\u0435\u0439\u0447\u0430\u0441 \u0445\u043e\u0447\u0443 \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u0440\u0430\u0437\u0431\u043e\u0440\u043e\u043c \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0438 \u043f\u043e\u043a\u0430\u0437\u043e\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c <a href=\"https:\/\/www.chaijs.com\/api\/bdd\/\" rel=\"noopener noreferrer nofollow\">Chains<\/a>.<\/p>\n<h3>\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435<\/h3>\n<p><a href=\"https:\/\/docs.insomnia.rest\/\" rel=\"noopener noreferrer nofollow\">Insomnia<\/a>\u00a0&#8212; \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0434\u043b\u044f \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f API (\u043a\u043b\u0438\u0435\u043d\u0442 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441 API).<\/p>\n<p>\u0414\u043b\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u044f \u0431\u0443\u0434\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u0430\u0439\u0442 Vikunja \u0438 \u0435\u0449\u0435 \u0434\u0440\u0443\u0433\u0438\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u044b.<\/p>\n<p>UI:\u00a0<a href=\"https:\/\/try.vikunja.io\/login\" rel=\"noopener noreferrer nofollow\">https:\/\/try.vikunja.io\/login<\/a><\/p>\n<p>API documentation:\u00a0<a href=\"https:\/\/try.vikunja.io\/api\/v1\/docs\" rel=\"noopener noreferrer nofollow\">https:\/\/try.vikunja.io\/api\/v1\/docs<\/a><\/p>\n<p>\u0421\u043a\u0430\u0447\u0430\u0442\u044c <a href=\"https:\/\/drive.google.com\/drive\/u\/1\/folders\/1BNoN7FQEnfc5MMqYcMP2SesnShYaQzLc\" rel=\"noopener noreferrer nofollow\">\u0433\u043e\u0442\u043e\u0432\u0443\u044e \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u044e<\/a> \u0434\u043b\u044f \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0441\u0430\u0439\u0442\u0430, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u043b\u0438 \u043f\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u043c \u0442\u0435\u0441\u0442-\u043a\u0435\u0439\u0441\u0430\u043c API \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 <a href=\"https:\/\/habr.com\/ru\/articles\/779918\/\" rel=\"noopener noreferrer nofollow\">\u0441\u0442\u0430\u0442\u044c\u0438<\/a>.<\/p>\n<p>\u041d\u0430 \u043c\u043e\u043c\u0435\u043d\u0442 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0438 \u0441\u0442\u0430\u0442\u044c\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432\u0435\u0440\u0441\u0438\u044f Insomnia: 8.6.0 \u0434\u043b\u044f Windows.<\/p>\n<h3>Base Environment<\/h3>\n<p>\u041d\u0430\u0447\u043d\u0443 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0447\u0435\u0440\u0435\u0437 \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u043e\u0435 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0435 &#171;Vikunja Environment&#187;.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/bca\/c29\/8eb\/bcac298ebdcda4385ede11cbc79b7731.png\" alt=\"\u0412\u0441\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435\" title=\"\u0412\u0441\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435\" width=\"920\" height=\"359\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/bca\/c29\/8eb\/bcac298ebdcda4385ede11cbc79b7731.png\"\/><\/p>\n<div><figcaption>\u0412\u0441\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435<\/figcaption><\/div>\n<\/figure>\n<p>\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u0430 Vikunja \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 JSON.<\/p>\n<p>\u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0436\u043d\u043e \u0441\u0430\u043c\u0438\u043c \u043e\u0431\u044a\u044f\u0432\u0438\u0442\u044c \u0438\u043b\u0438 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u043e\u0434\u0442\u044f\u0433\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/ad0\/c69\/527\/ad0c6952734f1da0cb4abc1c10c542cd.png\" alt=\"\u041f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u0430 Vikunja \u0432 Manage Environments (\u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0432 JSON \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435)\" title=\"\u041f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u0430 Vikunja \u0432 Manage Environments (\u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0432 JSON \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435)\" width=\"2395\" height=\"1191\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/ad0\/c69\/527\/ad0c6952734f1da0cb4abc1c10c542cd.png\"\/><\/p>\n<div><figcaption>\u041f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u0430 Vikunja \u0432 Manage Environments (\u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0432 JSON \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435)<\/figcaption><\/div>\n<\/figure>\n<pre><code class=\"json\">{ \"hosts\": { \"base_URL\": \"https:\/\/try.vikunja.io\/api\/v1\", \"sm_URL\": \"\" }, \"headers\": { \"content-type\": \"application\/json\" }, \"users\": { \"username\": \"Nadezhda_test1\", \"email\": \"user_testing1@test.com\", \"password\": \"Qq1234568\" }, \"auth\": { \"Token\": \"Response -> Body Attribute\" }, \"projects\": { \"project_Id\": \"Response -> Body Attribute\", \"title\": \"project_title\", \"hex_color\": \"7f23ff\" }, \"tasks\": { \"task_Id\": \"Response -> Body Attribute\", \"title_task\": \"title_task\" }, \"labels\": { \"label_Id\": \"Response -> Body Attribute\" } }<\/code><\/pre>\n<p>\u041d\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u044e, \u0447\u0442\u043e\u0431\u044b \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u0438\u0437 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432 \u0430\u0434\u0440\u0435\u0441\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0435, \u043d\u0443\u0436\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c\u00a0 <strong><em>_.<\/em><\/strong><\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/d65\/d69\/4e5\/d65d694e597f63b3545a66fd4e74d772.png\" alt=\"\u041e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 _.hosts.base_URL \u0432 \u0441\u0442\u0440\u043e\u043a\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 (\u0438\u043b\u0438 \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u043c \u0447\u0435\u0440\u0435\u0437\u00a0 _.)  \" title=\"\u041e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 _.hosts.base_URL \u0432 \u0441\u0442\u0440\u043e\u043a\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 (\u0438\u043b\u0438 \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u043c \u0447\u0435\u0440\u0435\u0437\u00a0 _.)  \" width=\"1051\" height=\"453\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/d65\/d69\/4e5\/d65d694e597f63b3545a66fd4e74d772.png\"\/><\/p>\n<div><figcaption>\u041e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 _.hosts.base_URL \u0432 \u0441\u0442\u0440\u043e\u043a\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 (\u0438\u043b\u0438 \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u043c \u0447\u0435\u0440\u0435\u0437\u00a0 _.)  <\/figcaption><\/div>\n<\/figure>\n<h2>\u0414\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435<\/h2>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/549\/9b2\/e49\/5499b2e49610260aea5f0e41f98cdab9.png\" alt=\"\u0414\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0432 Insomnia\" title=\"\u0414\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0432 Insomnia\" width=\"331\" height=\"301\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/549\/9b2\/e49\/5499b2e49610260aea5f0e41f98cdab9.png\"\/><\/p>\n<div><figcaption>\u0414\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0432 Insomnia<\/figcaption><\/div>\n<\/figure>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/2f2\/6c5\/684\/2f26c56846fa32b54fe0b818599bbf6b.png\" alt=\"+ \u0435\u0449\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435\" title=\"+ \u0435\u0449\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435\" width=\"325\" height=\"268\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/2f2\/6c5\/684\/2f26c56846fa32b54fe0b818599bbf6b.png\"\/><\/p>\n<div><figcaption>+ \u0435\u0449\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435<\/figcaption><\/div>\n<\/figure>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/3b7\/198\/096\/3b7198096ebd4ad7cb7fde87be20220b.png\" alt=\"\u041f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0438\u0437 Response \u0438 Request\" title=\"\u041f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0438\u0437 Response \u0438 Request\" width=\"325\" height=\"304\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/3b7\/198\/096\/3b7198096ebd4ad7cb7fde87be20220b.png\"\/><\/p>\n<div><figcaption>\u041f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0438\u0437 Response \u0438 Request<\/figcaption><\/div>\n<\/figure>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/1b9\/268\/9bb\/1b92689bb4753a47c918edc352485505.png\" alt=\"\u041f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0438\u0437 Request\" title=\"\u041f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0438\u0437 Request\" width=\"322\" height=\"296\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/1b9\/268\/9bb\/1b92689bb4753a47c918edc352485505.png\"\/><\/p>\n<div><figcaption>\u041f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0438\u0437 Request<\/figcaption><\/div>\n<\/figure>\n<p>\u0420\u0430\u0437\u0431\u0435\u0440\u0443 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0438\u0437 \u0432\u044b\u0448\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445. <\/p>\n<p>\u0427\u0442\u043e\u0431\u044b \u043e\u0442\u043e\u0431\u0440\u0430\u0437\u0438\u043b\u0441\u044f \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445, \u0432\u0430\u0436\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u043d\u0430\u0447\u0430\u043b\u043e \u043f\u043e\u0438\u0441\u043a\u0430, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0447\u0442\u043e\u0431\u044b \u043d\u0430\u0439\u0442\u0438 &#171;UUID&#187; \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u0434\u043b\u044f \u043a\u043b\u044e\u0447\u0430 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0432\u0432\u0435\u0441\u0442\u0438 &#171;u&#187;, \u0438 \u0437\u0430\u0442\u0435\u043c \u043e\u0442\u043e\u0431\u0440\u0430\u0437\u0438\u0442\u0441\u044f \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445, \u0433\u0434\u0435 \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u0435\u0442\u0441\u044f \u0431\u0443\u043a\u0432\u0430 &#171;u&#187;. <\/p>\n<p>\u0414\u0430\u043d\u043d\u044b\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043c\u043e\u0436\u043d\u043e \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0435\u0440\u0435\u0437 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f, <\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/81a\/9e1\/f08\/81a9e1f081ccdeb89b7dfb2643fdfeb3.png\" alt=\"\u041e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u0435 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0447\u0435\u0440\u0435\u0437 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0435\" title=\"\u041e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u0435 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0447\u0435\u0440\u0435\u0437 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0435\" width=\"975\" height=\"347\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/81a\/9e1\/f08\/81a9e1f081ccdeb89b7dfb2643fdfeb3.png\"\/><\/p>\n<div><figcaption>\u041e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u0435 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0447\u0435\u0440\u0435\u0437 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0435<\/figcaption><\/div>\n<\/figure>\n<p>\u043d\u043e \u0438 \u0447\u0435\u0440\u0435\u0437 \u0442\u0435\u043b\u043e \u043e\u0442\u0432\u0435\u0442\u0430 \u0437\u0430\u043f\u0440\u043e\u0441\u0430, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0438\u0445 \u043e\u0431\u044a\u044f\u0432\u043b\u044f\u0442\u044c \u0432 \u0442\u0435\u043b\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0438 \u0432 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430\u0445 \u0437\u0430\u043f\u0440\u043e\u0441\u0430. <\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/7ab\/b31\/d97\/7abb31d97bff72f20416bde4f9f9fcf6.png\" alt=\"\u041f\u0440\u0438\u043c\u0435\u04401: \u041e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u0435 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0432 \u0442\u0435\u043b\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u0430\" title=\"\u041f\u0440\u0438\u043c\u0435\u04401: \u041e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u0435 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0432 \u0442\u0435\u043b\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u0430\" width=\"1618\" height=\"329\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/7ab\/b31\/d97\/7abb31d97bff72f20416bde4f9f9fcf6.png\"\/><\/p>\n<div><figcaption>\u041f\u0440\u0438\u043c\u0435\u04401: \u041e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u0435 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0432 \u0442\u0435\u043b\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u0430<\/figcaption><\/div>\n<\/figure>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/f3f\/365\/ef3\/f3f365ef3ce06cdc39958b01f72b1a0e.png\" alt=\"\u041f\u0440\u0438\u043c\u0435\u04402: \u041e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u0435 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0432 \u0442\u0435\u043b\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u0430\" title=\"\u041f\u0440\u0438\u043c\u0435\u04402: \u041e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u0435 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0432 \u0442\u0435\u043b\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u0430\" width=\"2184\" height=\"781\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/f3f\/365\/ef3\/f3f365ef3ce06cdc39958b01f72b1a0e.png\"\/><\/p>\n<div><figcaption>\u041f\u0440\u0438\u043c\u0435\u04402: \u041e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u0435 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0432 \u0442\u0435\u043b\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u0430<\/figcaption><\/div>\n<\/figure>\n<p>\u0435\u0449\u0435 \u043f\u0440\u0438\u043c\u0435\u0440:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/f6d\/a80\/42a\/f6da8042a26a815bf6bec82a703654f8.png\" alt=\"\u041e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u0435 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0432 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430\u0445 \u0437\u0430\u043f\u0440\u043e\u0441\u0430\" title=\"\u041e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u0435 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0432 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430\u0445 \u0437\u0430\u043f\u0440\u043e\u0441\u0430\" width=\"1062\" height=\"339\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/f6d\/a80\/42a\/f6da8042a26a815bf6bec82a703654f8.png\"\/><\/p>\n<div><figcaption>\u041e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u0435 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0432 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430\u0445 \u0437\u0430\u043f\u0440\u043e\u0441\u0430<\/figcaption><\/div>\n<\/figure>\n<p>\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u043c\u043e\u0436\u043d\u043e \u0443\u0432\u0438\u0434\u0435\u0442\u044c, \u043d\u0430\u0436\u0430\u0432 \u043d\u0430 \u0434\u0430\u043d\u043d\u0443\u044e \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u0443\u044e \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e, \u0438 \u043e\u0442\u043a\u0440\u043e\u0435\u0442\u0441\u044f \u0432\u0441\u043f\u043b\u044b\u0432\u0430\u044e\u0449\u0435\u0435 \u043e\u043a\u043d\u043e &#171;Edit Tag&#187;.<\/p>\n<ol>\n<li>\n<p><strong>UUID -> Version &#8212; \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f UUID &#8212; \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f<\/strong><\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/93d\/55b\/fa3\/93d55bfa33711c632009938f02627eec.png\" alt=\"uuid\" title=\"uuid\" width=\"950\" height=\"553\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/93d\/55b\/fa3\/93d55bfa33711c632009938f02627eec.png\"\/><\/p>\n<div><figcaption>uuid<\/figcaption><\/div>\n<\/figure>\n<\/li>\n<li>\n<p><strong>Timestamp &#8212; get the current time<\/strong><\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/c6b\/f9f\/29d\/c6bf9f29d836e94d0c09ef3ae705510d.png\" alt=\"timestamp\" title=\"timestamp\" width=\"944\" height=\"550\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/c6b\/f9f\/29d\/c6bf9f29d836e94d0c09ef3ae705510d.png\"\/><\/p>\n<div><figcaption>timestamp<\/figcaption><\/div>\n<\/figure>\n<\/li>\n<li>\n<p><strong>Base64 &#8212; encode or decode values &#8212; \u0434\u043b\u044f URL<\/strong><\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/a96\/825\/6be\/a968256be160d4169edb182bd4bdb5dd.png\" width=\"952\" height=\"714\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/a96\/825\/6be\/a968256be160d4169edb182bd4bdb5dd.png\"\/><\/figure>\n<\/li>\n<li>\n<p><strong>OS &#8212; get OS info &#8212; \u0432\u0441\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438<\/strong><\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/f8d\/6e0\/304\/f8d6e0304c3f8a4695ec1af19036fb8d.png\" alt=\"\u0425\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u0438\u0441\u0442\u0438\u043a\u0430 OS\" title=\"\u0425\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u0438\u0441\u0442\u0438\u043a\u0430 OS\" width=\"956\" height=\"553\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/f8d\/6e0\/304\/f8d6e0304c3f8a4695ec1af19036fb8d.png\"\/><\/p>\n<div><figcaption>\u0425\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u0438\u0441\u0442\u0438\u043a\u0430 OS<\/figcaption><\/div>\n<\/figure>\n<\/li>\n<li>\n<p><strong>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 JSONPath<\/strong><\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/27e\/543\/663\/27e543663d77584fb30165122eaf91f0.png\" alt=\"\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0438\u0437 JSON string\" title=\"\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0438\u0437 JSON string\" width=\"958\" height=\"635\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/27e\/543\/663\/27e543663d77584fb30165122eaf91f0.png\"\/><\/p>\n<div><figcaption>\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0438\u0437 JSON string<\/figcaption><\/div>\n<\/figure>\n<\/li>\n<li>\n<p><strong>Hash &#8212; apply hash to a value \u0434\u043b\u044f Base64<\/strong><\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/b65\/db5\/03f\/b65db503fcf9623d9773276fa039ec39.png\" width=\"953\" height=\"736\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/b65\/db5\/03f\/b65db503fcf9623d9773276fa039ec39.png\"\/><\/figure>\n<\/li>\n<li>\n<p><strong>\u0418\u0437 \u043e\u0442\u0432\u0435\u0442\u0430 \u043e\u0442 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 Response \u043c\u043e\u0436\u043d\u043e &#171;\u0432\u044b\u0442\u0430\u0449\u0438\u0442\u044c&#187; \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f:<\/strong><\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/154\/7ea\/8b9\/1547ea8b910d11b6e998fd3990acc866.png\" width=\"917\" height=\"272\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/154\/7ea\/8b9\/1547ea8b910d11b6e998fd3990acc866.png\"\/><\/figure>\n<ul>\n<li>\n<p><strong>\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0438\u0437 \u0442\u0435\u043b\u0430 \u043e\u0442\u0432\u0435\u0442\u0430 \u043e\u0442 \u0441\u0435\u0440\u0432\u0435\u0440\u0430<\/strong><\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/9da\/345\/ee9\/9da345ee91fe804638c04c68470a5eb4.png\" width=\"937\" height=\"808\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/9da\/345\/ee9\/9da345ee91fe804638c04c68470a5eb4.png\"\/><\/figure>\n<\/li>\n<li>\n<p><strong>\u0422\u0435\u043b\u043e \u043e\u0442\u0432\u0435\u0442\u0430 \u043e\u0442 \u0441\u0435\u0440\u0432\u0435\u0440\u0430<\/strong><\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/6ec\/19b\/786\/6ec19b7862b8e0139f09360f341e1bea.png\" width=\"929\" height=\"719\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/6ec\/19b\/786\/6ec19b7862b8e0139f09360f341e1bea.png\"\/><\/figure>\n<\/li>\n<li>\n<p><strong>\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430 \u0438\u0437 \u043e\u0442\u0432\u0435\u0442\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0430<\/strong><\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/322\/a81\/cdd\/322a81cdd0dec0e6c99ff78c86de459a.png\" width=\"939\" height=\"798\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/322\/a81\/cdd\/322a81cdd0dec0e6c99ff78c86de459a.png\"\/><\/figure>\n<\/li>\n<li>\n<p><strong>URL-\u0430\u0434\u0440\u0435\u0441 \u0438\u043d\u0438\u0446\u0438\u0438\u0440\u0443\u044e\u0449\u0435\u0433\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0430<\/strong><\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/23b\/338\/7dc\/23b3387dca1c4c1d859e5d5dfe918ea1.png\" width=\"947\" height=\"723\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/23b\/338\/7dc\/23b3387dca1c4c1d859e5d5dfe918ea1.png\"\/><\/figure>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p><strong>\u0418\u0437 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 Request \u043c\u043e\u0436\u043d\u043e &#171;\u0432\u044b\u0442\u0430\u0449\u0438\u0442\u044c&#187; \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f:<\/strong><\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/695\/f4f\/e41\/695f4fe410bbab39307b1861533d9648.png\" width=\"947\" height=\"564\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/695\/f4f\/e41\/695f4fe410bbab39307b1861533d9648.png\"\/><\/p>\n<div><figcaption>URL-\u0430\u0434\u0440\u0435\u0441 \u0438\u043d\u0438\u0446\u0438\u0438\u0440\u0443\u044e\u0449\u0435\u0433\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0430<\/figcaption><\/div>\n<\/figure>\n<ol>\n<li>\n<p><strong>\u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430 \u0438\u0437 \u0437\u0430\u043f\u0440\u043e\u0441\u0430<\/strong><\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/3a3\/869\/a0f\/3a3869a0f0154b502fbba0d49d68f999.png\" width=\"963\" height=\"642\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/3a3\/869\/a0f\/3a3869a0f0154b502fbba0d49d68f999.png\"\/><\/figure>\n<\/li>\n<li>\n<p><strong>\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 Cookie \u043f\u043e \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044e<\/strong><\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/a51\/960\/fca\/a51960fcae6afe0dbecaa67c6bbda531.png\" width=\"949\" height=\"642\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/a51\/960\/fca\/a51960fcae6afe0dbecaa67c6bbda531.png\"\/><\/figure>\n<p>\u0438 \u0442.\u0434.. <\/p>\n<p>\u0422\u0430\u043a\u0436\u0435 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u0435\u0441\u0442\u044c \u043f\u0440\u043e\u0447\u0442\u0435\u043d\u0438\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0433\u043e \u0438\u0437 \u0444\u0430\u0439\u043b\u0430, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0432\u0445\u043e\u0434\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043b\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f. \u042f \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u043b\u0430 \u0442\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0447\u0430\u0441\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0432 \u0440\u0430\u0431\u043e\u0442\u0435, \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f &#171;Body Attribute &#8212; value of response body&#187;<\/p>\n<\/li>\n<\/ol>\n<\/li>\n<\/ol>\n<h2>\u0412\u043a\u043b\u0430\u0434\u043a\u0430 Tests -> New Test Suite -> New Test<\/h2>\n<p><strong>\u041f\u0440\u0438\u043c\u0435\u0440\u044b \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432 \u0434\u043b\u044f \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f<\/strong> \u0434\u043b\u044f <a href=\"https:\/\/try.vikunja.io\/login\" rel=\"noopener noreferrer nofollow\">\u0441\u0430\u0439\u0442\u0430 Vikunja<\/a> c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c chaijs<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/85c\/896\/714\/85c89671458bec4462e487d9565d9025.png\" alt=\"\u041d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432 \u0434\u043b\u044f \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u043d\u0430 \u0432\u043a\u043b\u0430\u0434\u043a\u0435 Tests\" title=\"\u041d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432 \u0434\u043b\u044f \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u043d\u0430 \u0432\u043a\u043b\u0430\u0434\u043a\u0435 Tests\" width=\"1606\" height=\"1135\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/85c\/896\/714\/85c89671458bec4462e487d9565d9025.png\"\/><\/p>\n<div><figcaption>\u041d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432 \u0434\u043b\u044f \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u043d\u0430 \u0432\u043a\u043b\u0430\u0434\u043a\u0435 Tests<\/figcaption><\/div>\n<\/figure>\n<pre><code class=\"javascript\">\/\/\u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0430 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 POST \/register const response2 = await insomnia.send('req_0ca37b8e2a0f40a7a610250ef48f4697');   \/\/ \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0441\u0442\u0430\u0442\u0443\u0441 \u043a\u043e\u0434\u0430 expect(response2.status).to.equal(200)   \/\/\u043f\u0430\u0440\u0441\u0438\u043d\u0433 \u0442\u0435\u043b\u0430 \u043e\u0442\u0432\u0435\u0442\u0430 \u043e\u0442 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u043d\u0430 \u044f\u0437\u044b\u043a js const res_body = JSON.parse(response2.data)  \/\/\u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0442\u0435\u043b\u0430 \u043e\u0442\u0432\u0435\u0442\u0430 \u043e\u0442 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u0438 console.log(res_body)  \/\/\u0442\u0435\u043b\u043e \u043e\u0442\u0432\u0435\u0442\u0430 \u043e\u0442 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u043c expect(res_body).to.be.an('object')  \/\/\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043a\u043b\u044e\u0447\u0430 username \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u0442\u0440\u043e\u043a\u043e\u0439 expect(res_body.username).to.be.a('string')  \/\/\u043a\u043b\u044e\u0447 username \u043d\u0435 \u043f\u0443\u0441\u0442\u043e\u0439 expect(res_body.username).not.has.length(0)  \/\/\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043a\u043b\u044e\u0447\u0430 email \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u0442\u0440\u043e\u043a\u043e\u0439 expect(res_body.email).to.be.a('string')  \/\/\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043a\u043b\u044e\u0447\u0430 email \u043d\u0435 \u043f\u0443\u0441\u0442\u043e\u0439 expect(res_body.email).not.has.length(0)  \/\/\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430, \u0447\u0442\u043e \u0443 \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0435\u0441\u0442\u044c \u043e\u0436\u0438\u0434\u0430\u0435\u043c\u044b\u0435 \u043f\u043e\u043b\u044f const expected_keys = [ \"id\", \"name\", \"username\", \"email\", \"created\", \"updated\" ]  \/\/\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043e\u0436\u0438\u0434\u0430\u0435\u043c\u044b\u0445 \u043a\u043b\u044e\u0447\u0435\u0439 \u0432 \u0442\u0435\u043b\u0435 \u043e\u0442\u0432\u0435\u0442\u0430 \u043e\u0442 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 expect(res_body).to.have.all.keys(expected_keys)  \/\/\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0442\u043e\u0433\u043e, \u043a\u043b\u044e\u0447\u0438 \u0432 \u043e\u0442\u0432\u0435\u0442\u0435 \u043e\u0442 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0440\u0430\u0432\u043d\u044b \u043a\u0430\u043a\u043e\u043c\u0443-\u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044e expect(res_body.username).to.equal(\"&lt;\u0423\u043a\u0430\u0437\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0438\u0437 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f>\") expect(res_body.email).to.equal(\"&lt;\u0423\u043a\u0430\u0437\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0438\u0437 \u043e\u043a\u043f\u0443\u0436\u0435\u043d\u0438\u044f>\")<\/code><\/pre>\n<p>\u0425\u043e\u0447\u0443 \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441 \u0447\u0435\u0440\u0435\u0437 &#171;Select a request&#187;, \u0430 \u043c\u043e\u0436\u043d\u043e \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441 \u0432\u043d\u0443\u0442\u0440\u0438 \u0441\u0430\u043c\u043e\u0433\u043e \u0442\u0435\u0441\u0442\u0430.<\/p>\n<p>\u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u044f \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044e \u0442\u0430\u043a:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/a93\/eda\/bae\/a93edabaed89e128822e8dccea9f878c.png\" alt=\"\u041e\u0442\u043f\u0440\u0430\u0432\u043a\u0430 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0432\u043d\u0443\u0442\u0440\u0438 \u0442\u0435\u0441\u0442\u0430 \u0432\u043c\u0435\u0441\u0442\u043e \u043f\u043e\u043b\u044f \u201cSelect a request\u201d  \" title=\"\u041e\u0442\u043f\u0440\u0430\u0432\u043a\u0430 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0432\u043d\u0443\u0442\u0440\u0438 \u0442\u0435\u0441\u0442\u0430 \u0432\u043c\u0435\u0441\u0442\u043e \u043f\u043e\u043b\u044f \u201cSelect a request\u201d  \" width=\"1489\" height=\"624\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/a93\/eda\/bae\/a93edabaed89e128822e8dccea9f878c.png\"\/><\/p>\n<div><figcaption>\u041e\u0442\u043f\u0440\u0430\u0432\u043a\u0430 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0432\u043d\u0443\u0442\u0440\u0438 \u0442\u0435\u0441\u0442\u0430 \u0432\u043c\u0435\u0441\u0442\u043e \u043f\u043e\u043b\u044f \u201cSelect a request\u201d  <\/figcaption><\/div>\n<\/figure>\n<p><strong>\u041f\u0440\u0438\u043c\u0435\u0440\u044b \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432 \u0434\u043b\u044f \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f<\/strong> <\/p>\n<pre><code class=\"javascript\">\/\/\u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0430 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 POST \/login const response2 = await insomnia.send('req_c6319e16d41a4ed593fec04d92f7183c');  \/\/ \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0441\u0442\u0430\u0442\u0443\u0441 \u043a\u043e\u0434\u0430 expect(response2.status).to.equal(200);  const res_body = JSON.parse(response2.data) console.log(res_body)  \/\/\u0442\u0435\u043b\u043e \u043e\u0442\u0432\u0435\u0442\u0430 \u043e\u0442 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u043c expect(res_body).to.be.an('object')  \/\/\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043a\u043b\u044e\u0447\u0430 token \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u0442\u0440\u043e\u043a\u043e\u0439 expect(res_body.token).to.be.a('string')  \/\/\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043a\u043b\u044e\u0447\u0430 token \u043d\u0435 \u043f\u0443\u0441\u0442\u043e\u0435 expect(res_body.token).not.has.length(0) console.log(res_body.token)  \/\/\u043c\u043e\u0436\u043d\u043e \u043a\u043e\u043c\u0431\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u0447\u0435\u0440\u0435\u0437 .and expect(res_body.token).to.be.a('string').and.not.has.length(0)<\/code><\/pre>\n<p><strong>\u041f\u0440\u0438\u043c\u0435\u0440\u044b \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432 \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u043c \u043d\u0430 \u0441\u0430\u0439\u0442\u0435 (Create Project<\/strong>)<\/p>\n<pre><code class=\"javascript\">\/\/\u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0430 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 PUT \/projects const response2 = await insomnia.send('req_b8be8c6b91e24343af7e2c1ae1ffa7fc');  \/\/ \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0441\u0442\u0430\u0442\u0443\u0441 \u043a\u043e\u0434\u0430 201 expect(response2.status).to.equal(201);  const res_body = JSON.parse(response2.data) console.log(res_body)  \/\/\u0442\u0435\u043b\u043e \u043e\u0442\u0432\u0435\u0442\u0430 \u043e\u0442 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u043c expect(res_body).to.be.an('object')  \/\/\u0442\u0435\u043b\u043e \u043e\u0442\u0432\u0435\u0442\u0430 \u0438\u043c\u0435\u0435\u0442 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e (\u043a\u043b\u044e\u0447) id expect(res_body).to.have.property('id')  \/\/\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043a\u043b\u044e\u0447\u0430 id \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0447\u0438\u0441\u043b\u043e\u043c expect(res_body.id).to.be.a('number')  \/\/g\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0442\u043e\u0433\u043e, \u043a\u043b\u044e\u0447 \u0432 \u043e\u0442\u0432\u0435\u0442\u0435 \u043e\u0442 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0440\u0430\u0432\u0435\u043d \u043a\u0430\u043a\u043e\u043c\u0443-\u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044e expect(res_body.id).to.equal(&lt;\u0423\u043a\u0430\u0437\u0430\u0442\u044c \u043e\u0436\u0438\u0434\u0430\u0435\u043c\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435>) console.log(res_body.id)  \/\/\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043a\u043b\u044e\u0447\u0430 title \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u0442\u0440\u043e\u043a\u043e\u0439 expect(res_body.title).to.be.a('string')  \/\/\u043f\u0440\u043e\u0432\u0435\u043a\u0440\u0430 \u0443\u043a\u0430\u0437\u0430\u043d\u0430 \u0441 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0435\u043c, \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0435\u0441\u043b\u0438 owner.username \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u044f\u0432\u043b\u044f\u0442\u044c\u0441\u044f \u0441\u0442\u0440\u043e\u043a\u043e\u0439 expect(res_body.owner.username, \"\u043f\u043e\u043b\u0435 username \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u043e\u0439\").to.be.a('string')  \/\/\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043a\u043b\u044e\u0447\u0430 is_archived \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f boolean expect(res_body.is_archived).to.equal(false)<\/code><\/pre>\n<p><strong>\u041f\u0440\u0438\u043c\u0435\u0440\u044b \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432 \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0432\u0441\u0435\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 Get all Projects<\/strong><\/p>\n<pre><code class=\"javascript\">\/\/\u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0430 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 GET \/projects const response2 = await insomnia.send('req_716ace9255e34ac1970bfc7571dc6ab0');  \/\/\u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0441\u0442\u0430\u0442\u0443\u0441 \u043a\u043e\u0434\u0430 200 expect(response2.status).to.equal(200);  const res_body = JSON.parse(response2.data)  \/\/\u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u0435 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u044b \u0434\u043b\u044f \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u0432 \u043c\u0430\u0441\u0441\u0438\u0432\u0435 const project_id1 = res_body[0].id console.log(project_id1)  \/\/\u0434\u043b\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u0430 - \u0438 \u0442\u043e \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442 const expected_colors = [\"7f23ff\"]  \/\/\u0432 JavaScript \u0435\u0441\u0442\u044c \u043c\u0435\u0442\u043e\u0434 map \u0434\u043b\u044f \u0441\u043f\u0438\u0441\u043a\u043e\u0432, \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u044e\u0449\u0438\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u044e => \u043a \u043a\u0430\u0436\u0434\u043e\u043c\u0443 \u0438\u0437 \u0435\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \/\/\u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0433\u043e \u043a\u043b\u044e\u0447\u0430 const actual_colors = res_body.map(item => item.hex_color)  \/\/\u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430, \u0447\u0442\u043e \u0435\u0441\u0442\u044c \u043a\u043b\u044e\u0447, \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u043d\u044b\u0439 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c expect(actual_colors).to.include.members(expected_colors) console.log(actual_colors)  \/\/\u0435\u0441\u0442\u044c \u0435\u0449\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043d\u0430 \u0441\u043f\u0438\u0441\u043e\u043a \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0441 \u043f\u043e\u043b\u044f\u043c\u0438, \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \/\/\u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f .to.include.deep.members  \/\/\u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0440\u0438\u043c\u0435\u0440 const values = [{\"hex_color\": \"7f23ff\", \"title\": \"project_title\"}, {\"hex_color\": \"7f23f0\", \"title\": \"project_title2\"}, {\"hex_color\": \"7f32ff\", \"title\": \"project_title3\"}]]] const expected_values = [{\"hex_color\": \"7f23ff\", \"title\": \"project_title\"}] expect(values).to.include.deep.members(expected)  \/\/\u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0438\u043c\u0435\u044e\u0449\u0438\u0435\u0441\u044f \u043e\u0436\u0438\u0434\u0430\u0435\u043c\u044b\u0435 \u043a\u043b\u044e\u0447\u0438 const keys = {\"hex_color\": \"7f23ff\", \"title\": \"project_title\"} const expected_keys = [\"hex_color\", \"title\"] expect(keys).to.include.all.keys(expected_keys)  \/\/\u0432 JavaScript \u0435\u0441\u0442\u044c Set \u0434\u043b\u044f \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \/\/\u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0433\u043e \u043a\u043b\u044e\u0447\u0430 hex_color const hex_colors = [\"7f23ff\", \"7f23fs\", \"7f05ff\",\"7f23ff\"] const unique_colors = new Set(hex_colors) expect(unique_colors).to.have.lengthOf(3) expect(unique_colors).to.have.all.keys(\"7f23ff\", \"7f23fs\", \"7f05ff\")  \/\/\u0435\u0441\u0442\u044c \u0435\u0449\u0435 \u043c\u0435\u0442\u043e\u0434 forEach - \u0446\u0438\u043a\u043b - \u043f\u043e \u043a\u0430\u0436\u0434\u043e\u043c\u0443 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0443  \/\/\u0438 \u043c\u0435\u0442\u043e\u0434 .filter \u0434\u043b\u044f \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 <\/code><\/pre>\n<p>\u0418\u0437 <a href=\"https:\/\/www.chaijs.com\/api\/bdd\/\" rel=\"noopener noreferrer nofollow\">https:\/\/www.chaijs.com\/api\/bdd\/<\/a> \u0438 <a href=\"https:\/\/docs.insomnia.rest\/insomnia\/unit-testing\" rel=\"noopener noreferrer nofollow\"><u>https:\/\/docs.insomnia.rest\/insomnia\/unit-testing<\/u><\/a>  \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438, \u0447\u0442\u043e\u0431\u044b \u0441\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0441\u0432\u043e\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043d\u0430 \u0432\u043a\u043b\u0430\u0434\u043a\u0435 tests.<\/p>\n<h2>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h2>\n<p>\u0412 \u0431\u0443\u0434\u0443\u0449\u0435\u043c \u0445\u043e\u0447\u0443 \u0437\u0430\u0442\u0440\u043e\u043d\u0443\u0442\u044c \u0442\u0435\u043c\u0443 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043f\u043b\u0430\u0433\u0438\u043d\u0430 \u0434\u043b\u044f Insomnia. \u042f \u043d\u0430 \u043f\u0443\u0442\u0438 \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u044f, \u0447\u0442\u043e\u0431 \u0442\u0430\u043a\u0436\u0435 \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u0441\u0432\u043e\u0438\u043c \u043e\u043f\u044b\u0442\u043e\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432.<\/p>\n<p>\u0422\u0430\u043a\u0436\u0435 \u044f \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043c\u043e\u0439 \u0432\u0435\u0431\u0438\u043d\u0430\u0440 \u043d\u0430 \u0442\u0435\u043c\u0443 &#171;\u0422\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 API \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c Insomnia&#187;<\/p>\n<div class=\"tm-iframe_temp\" data-src=\"https:\/\/embedd.srv.habr.com\/iframe\/65c2826ca5e031d47d42d357\" data-style=\"\" id=\"65c2826ca5e031d47d42d357\" width=\"\"><\/div>\n<p><strong><em>\u0411\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044e \u0437\u0430 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 \u0438 \u043f\u0440\u043e\u0447\u0442\u0435\u043d\u0438\u0435.<\/em><\/strong><\/p>\n<p>\u0421 \u0443\u0432\u0430\u0436\u0435\u043d\u0438\u0435\u043c, \u041d\u0430\u0434\u0435\u0436\u0434\u0430 \u0414\u0443\u0434\u043d\u0438\u043a (<a href=\"https:\/\/t.me\/protestinginfo\" rel=\"noopener noreferrer nofollow\">protestinginfo<\/a>), \u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u0438\u043d\u0436\u0435\u043d\u0435\u0440 \u043f\u043e \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044e \u0432 \u0444\u0438\u043d\u0442\u0435\u0445\u0435 \u0438 \u043c\u0435\u043d\u0442\u043e\u0440 \u043f\u043e \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044e \u041f\u041e.<\/p>\n<p>\u0418 \u0436\u0435\u043b\u0430\u044e \u0434\u043e\u0441\u0442\u0438\u0447\u044c \u0441\u0432\u043e\u0435\u0439 \u0446\u0435\u043b\u0438!<\/p>\n<\/p>\n<\/div>\n<\/div>\n<\/div>\n<p><!----><!----><\/div>\n<p><!----><!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/791826\/\"> https:\/\/habr.com\/ru\/articles\/791826\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u0410\u0432\u0442\u043e\u0440: \u041d\u0430\u0434\u0435\u0436\u0434\u0430 \u0414\u0443\u0434\u043d\u0438\u043a  <\/p>\n<p>\u041f\u0430\u043c\u044f\u0442\u043a\u0430 \u0434\u043b\u044f \u0438\u043d\u0436\u0435\u043d\u0435\u0440\u043e\u0432 \u043f\u043e \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044e \u041f\u041e.<\/p>\n<p>\u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u044e \u0441\u0435\u0440\u0438\u044e \u0441\u0432\u043e\u0438\u0445 \u0441\u0442\u0430\u0442\u0435\u0439 \u043f\u0440\u043e Insomnia, \u043f\u0435\u0440\u0432\u0443\u044e \u0441\u0442\u0430\u0442\u044c\u044e \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u043f\u043e <a href=\"https:\/\/habr.com\/ru\/articles\/754154\/\" rel=\"noopener noreferrer nofollow\">\u0441\u0441\u044b\u043b\u043a\u0435<\/a>.<\/p>\n<p>\u0421\u0435\u0439\u0447\u0430\u0441 \u0445\u043e\u0447\u0443 \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u0440\u0430\u0437\u0431\u043e\u0440\u043e\u043c \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0438 \u043f\u043e\u043a\u0430\u0437\u043e\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c <a href=\"https:\/\/www.chaijs.com\/api\/bdd\/\" rel=\"noopener noreferrer nofollow\">Chains<\/a>.<\/p>\n<h3>\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435<\/h3>\n<p><a href=\"https:\/\/docs.insomnia.rest\/\" rel=\"noopener noreferrer nofollow\">Insomnia<\/a>\u00a0&#8212; \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0434\u043b\u044f \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f API (\u043a\u043b\u0438\u0435\u043d\u0442 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441 API).<\/p>\n<p>\u0414\u043b\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u044f \u0431\u0443\u0434\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u0430\u0439\u0442 Vikunja \u0438 \u0435\u0449\u0435 \u0434\u0440\u0443\u0433\u0438\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u044b.<\/p>\n<p>UI:\u00a0<a href=\"https:\/\/try.vikunja.io\/login\" rel=\"noopener noreferrer nofollow\">https:\/\/try.vikunja.io\/login<\/a><\/p>\n<p>API documentation:\u00a0<a href=\"https:\/\/try.vikunja.io\/api\/v1\/docs\" rel=\"noopener noreferrer nofollow\">https:\/\/try.vikunja.io\/api\/v1\/docs<\/a><\/p>\n<p>\u0421\u043a\u0430\u0447\u0430\u0442\u044c <a href=\"https:\/\/drive.google.com\/drive\/u\/1\/folders\/1BNoN7FQEnfc5MMqYcMP2SesnShYaQzLc\" rel=\"noopener noreferrer nofollow\">\u0433\u043e\u0442\u043e\u0432\u0443\u044e \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u044e<\/a> \u0434\u043b\u044f \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0441\u0430\u0439\u0442\u0430, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u043b\u0438 \u043f\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u043c \u0442\u0435\u0441\u0442-\u043a\u0435\u0439\u0441\u0430\u043c API \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 <a href=\"https:\/\/habr.com\/ru\/articles\/779918\/\" rel=\"noopener noreferrer nofollow\">\u0441\u0442\u0430\u0442\u044c\u0438<\/a>.<\/p>\n<p>\u041d\u0430 \u043c\u043e\u043c\u0435\u043d\u0442 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0438 \u0441\u0442\u0430\u0442\u044c\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432\u0435\u0440\u0441\u0438\u044f Insomnia: 8.6.0 \u0434\u043b\u044f Windows.<\/p>\n<h3>Base Environment<\/h3>\n<p>\u041d\u0430\u0447\u043d\u0443 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0447\u0435\u0440\u0435\u0437 \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u043e\u0435 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0435 &#171;Vikunja Environment&#187;.<\/p>\n<figure class=\"full-width\">\n<div><figcaption>\u0412\u0441\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435<\/figcaption><\/div>\n<\/figure>\n<p>\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u0430 Vikunja \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 JSON.<\/p>\n<p>\u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0436\u043d\u043e \u0441\u0430\u043c\u0438\u043c \u043e\u0431\u044a\u044f\u0432\u0438\u0442\u044c \u0438\u043b\u0438 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u043e\u0434\u0442\u044f\u0433\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438.<\/p>\n<figure class=\"full-width\">\n<div><figcaption>\u041f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u0430 Vikunja \u0432 Manage Environments (\u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0432 JSON \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435)<\/figcaption><\/div>\n<\/figure>\n<pre><code class=\"json\">{ \"hosts\": { \"base_URL\": \"https:\/\/try.vikunja.io\/api\/v1\", \"sm_URL\": \"\" }, \"headers\": { \"content-type\": \"application\/json\" }, \"users\": { \"username\": \"Nadezhda_test1\", \"email\": \"user_testing1@test.com\", \"password\": \"Qq1234568\" }, \"auth\": { \"Token\": \"Response -> Body Attribute\" }, \"projects\": { \"project_Id\": \"Response -> Body Attribute\", \"title\": \"project_title\", \"hex_color\": \"7f23ff\" }, \"tasks\": { \"task_Id\": \"Response -> Body Attribute\", \"title_task\": \"title_task\" }, \"labels\": { \"label_Id\": \"Response -> Body Attribute\" } }<\/code><\/pre>\n<p>\u041d\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u044e, \u0447\u0442\u043e\u0431\u044b \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u0438\u0437 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432 \u0430\u0434\u0440\u0435\u0441\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0435, \u043d\u0443\u0436\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c\u00a0 <strong><em>_.<\/em><\/strong><\/p>\n<figure class=\"full-width\">\n<div><figcaption>\u041e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 _.hosts.base_URL \u0432 \u0441\u0442\u0440\u043e\u043a\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 (\u0438\u043b\u0438 \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u043c \u0447\u0435\u0440\u0435\u0437\u00a0 _.)  <\/figcaption><\/div>\n<\/figure>\n<h2>\u0414\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435<\/h2>\n<figure class=\"\">\n<div><figcaption>\u0414\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0432 Insomnia<\/figcaption><\/div>\n<\/figure>\n<figure class=\"\">\n<div><figcaption>+ \u0435\u0449\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435<\/figcaption><\/div>\n<\/figure>\n<figure class=\"\">\n<div><figcaption>\u041f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0438\u0437 Response \u0438 Request<\/figcaption><\/div>\n<\/figure>\n<figure class=\"\">\n<div><figcaption>\u041f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0438\u0437 Request<\/figcaption><\/div>\n<\/figure>\n<p>\u0420\u0430\u0437\u0431\u0435\u0440\u0443 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0438\u0437 \u0432\u044b\u0448\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445. <\/p>\n<p>\u0427\u0442\u043e\u0431\u044b \u043e\u0442\u043e\u0431\u0440\u0430\u0437\u0438\u043b\u0441\u044f \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445, \u0432\u0430\u0436\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u043d\u0430\u0447\u0430\u043b\u043e \u043f\u043e\u0438\u0441\u043a\u0430, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0447\u0442\u043e\u0431\u044b \u043d\u0430\u0439\u0442\u0438 &#171;UUID&#187; \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u0434\u043b\u044f \u043a\u043b\u044e\u0447\u0430 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0432\u0432\u0435\u0441\u0442\u0438 &#171;u&#187;, \u0438 \u0437\u0430\u0442\u0435\u043c \u043e\u0442\u043e\u0431\u0440\u0430\u0437\u0438\u0442\u0441\u044f \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445, \u0433\u0434\u0435 \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u0435\u0442\u0441\u044f \u0431\u0443\u043a\u0432\u0430 &#171;u&#187;. <\/p>\n<p>\u0414\u0430\u043d\u043d\u044b\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043c\u043e\u0436\u043d\u043e \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0435\u0440\u0435\u0437 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f, <\/p>\n<figure class=\"full-width\">\n<div><figcaption>\u041e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u0435 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0447\u0435\u0440\u0435\u0437 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0435<\/figcaption><\/div>\n<\/figure>\n<p>\u043d\u043e \u0438 \u0447\u0435\u0440\u0435\u0437 \u0442\u0435\u043b\u043e \u043e\u0442\u0432\u0435\u0442\u0430 \u0437\u0430\u043f\u0440\u043e\u0441\u0430, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0438\u0445 \u043e\u0431\u044a\u044f\u0432\u043b\u044f\u0442\u044c \u0432 \u0442\u0435\u043b\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0438 \u0432 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430\u0445 \u0437\u0430\u043f\u0440\u043e\u0441\u0430. <\/p>\n<figure class=\"full-width\">\n<div><figcaption>\u041f\u0440\u0438\u043c\u0435\u04401: \u041e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u0435 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0432 \u0442\u0435\u043b\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u0430<\/figcaption><\/div>\n<\/figure>\n<figure class=\"full-width\">\n<div><figcaption>\u041f\u0440\u0438\u043c\u0435\u04402: \u041e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u0435 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0432 \u0442\u0435\u043b\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u0430<\/figcaption><\/div>\n<\/figure>\n<p>\u0435\u0449\u0435 \u043f\u0440\u0438\u043c\u0435\u0440:<\/p>\n<figure class=\"full-width\">\n<div><figcaption>\u041e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u0435 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0432 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430\u0445 \u0437\u0430\u043f\u0440\u043e\u0441\u0430<\/figcaption><\/div>\n<\/figure>\n<p>\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u043c\u043e\u0436\u043d\u043e \u0443\u0432\u0438\u0434\u0435\u0442\u044c, \u043d\u0430\u0436\u0430\u0432 \u043d\u0430 \u0434\u0430\u043d\u043d\u0443\u044e \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u0443\u044e \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e, \u0438 \u043e\u0442\u043a\u0440\u043e\u0435\u0442\u0441\u044f \u0432\u0441\u043f\u043b\u044b\u0432\u0430\u044e\u0449\u0435\u0435 \u043e\u043a\u043d\u043e &#171;Edit Tag&#187;.<\/p>\n<ol>\n<li>\n<p><strong>UUID -> Version &#8212; \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f UUID &#8212; \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f<\/strong><\/p>\n<figure class=\"full-width\">\n<div><figcaption>uuid<\/figcaption><\/div>\n<\/figure>\n<\/li>\n<li>\n<p><strong>Timestamp &#8212; get the current time<\/strong><\/p>\n<figure class=\"full-width\">\n<div><figcaption>timestamp<\/figcaption><\/div>\n<\/figure>\n<\/li>\n<li>\n<p><strong>Base64 &#8212; encode or decode values &#8212; \u0434\u043b\u044f URL<\/strong><\/p>\n<figure class=\"full-width\"><\/figure>\n<\/li>\n<li>\n<p><strong>OS &#8212; get OS info &#8212; \u0432\u0441\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438<\/strong><\/p>\n<figure class=\"full-width\">\n<div><figcaption>\u0425\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u0438\u0441\u0442\u0438\u043a\u0430 OS<\/figcaption><\/div>\n<\/figure>\n<\/li>\n<li>\n<p><strong>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 JSONPath<\/strong><\/p>\n<figure class=\"full-width\">\n<div><figcaption>\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0438\u0437 JSON string<\/figcaption><\/div>\n<\/figure>\n<\/li>\n<li>\n<p><strong>Hash &#8212; apply hash to a value \u0434\u043b\u044f Base64<\/strong><\/p>\n<figure class=\"full-width\"><\/figure>\n<\/li>\n<li>\n<p><strong>\u0418\u0437 \u043e\u0442\u0432\u0435\u0442\u0430 \u043e\u0442 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 Response \u043c\u043e\u0436\u043d\u043e &#171;\u0432\u044b\u0442\u0430\u0449\u0438\u0442\u044c&#187; \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f:<\/strong><\/p>\n<figure class=\"full-width\"><\/figure>\n<ul>\n<li>\n<p><strong>\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0438\u0437 \u0442\u0435\u043b\u0430 \u043e\u0442\u0432\u0435\u0442\u0430 \u043e\u0442 \u0441\u0435\u0440\u0432\u0435\u0440\u0430<\/strong><\/p>\n<figure class=\"full-width\"><\/figure>\n<\/li>\n<li>\n<p><strong>\u0422\u0435\u043b\u043e \u043e\u0442\u0432\u0435\u0442\u0430 \u043e\u0442 \u0441\u0435\u0440\u0432\u0435\u0440\u0430<\/strong><\/p>\n<figure class=\"full-width\"><\/figure>\n<\/li>\n<li>\n<p><strong>\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430 \u0438\u0437 \u043e\u0442\u0432\u0435\u0442\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0430<\/strong><\/p>\n<figure class=\"full-width\"><\/figure>\n<\/li>\n<li>\n<p><strong>URL-\u0430\u0434\u0440\u0435\u0441 \u0438\u043d\u0438\u0446\u0438\u0438\u0440\u0443\u044e\u0449\u0435\u0433\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0430<\/strong><\/p>\n<figure class=\"full-width\"><\/figure>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p><strong>\u0418\u0437 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 Request \u043c\u043e\u0436\u043d\u043e &#171;\u0432\u044b\u0442\u0430\u0449\u0438\u0442\u044c&#187; \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f:<\/strong><\/p>\n<figure class=\"full-width\">\n<div><figcaption>URL-\u0430\u0434\u0440\u0435\u0441 \u0438\u043d\u0438\u0446\u0438\u0438\u0440\u0443\u044e\u0449\u0435\u0433\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0430<\/figcaption><\/div>\n<\/figure>\n<ol>\n<li>\n<p><strong>\u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430 \u0438\u0437 \u0437\u0430\u043f\u0440\u043e\u0441\u0430<\/strong><\/p>\n<figure class=\"full-width\"><\/figure>\n<\/li>\n<li>\n<p><strong>\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 Cookie \u043f\u043e \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044e<\/strong><\/p>\n<figure class=\"full-width\"><\/figure>\n<p>\u0438 \u0442.\u0434.. <\/p>\n<p>\u0422\u0430\u043a\u0436\u0435 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u0435\u0441\u0442\u044c \u043f\u0440\u043e\u0447\u0442\u0435\u043d\u0438\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0433\u043e \u0438\u0437 \u0444\u0430\u0439\u043b\u0430, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0432\u0445\u043e\u0434\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043b\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f. \u042f \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u043b\u0430 \u0442\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0447\u0430\u0441\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0432 \u0440\u0430\u0431\u043e\u0442\u0435, \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f &#171;Body Attribute &#8212; value of response body&#187;<\/p>\n<\/li>\n<\/ol>\n<\/li>\n<\/ol>\n<h2>\u0412\u043a\u043b\u0430\u0434\u043a\u0430 Tests -> New Test Suite -> New Test<\/h2>\n<p><strong>\u041f\u0440\u0438\u043c\u0435\u0440\u044b \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432 \u0434\u043b\u044f \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f<\/strong> \u0434\u043b\u044f <a href=\"https:\/\/try.vikunja.io\/login\" rel=\"noopener noreferrer nofollow\">\u0441\u0430\u0439\u0442\u0430 Vikunja<\/a> c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c chaijs<\/p>\n<figure class=\"full-width\">\n<div><figcaption>\u041d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432 \u0434\u043b\u044f \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u043d\u0430 \u0432\u043a\u043b\u0430\u0434\u043a\u0435 Tests<\/figcaption><\/div>\n<\/figure>\n<pre><code class=\"javascript\">\/\/\u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0430 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 POST \/register const response2 = await insomnia.send('req_0ca37b8e2a0f40a7a610250ef48f4697');   \/\/ \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0441\u0442\u0430\u0442\u0443\u0441 \u043a\u043e\u0434\u0430 expect(response2.status).to.equal(200)   \/\/\u043f\u0430\u0440\u0441\u0438\u043d\u0433 \u0442\u0435\u043b\u0430 \u043e\u0442\u0432\u0435\u0442\u0430 \u043e\u0442 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u043d\u0430 \u044f\u0437\u044b\u043a js const res_body = JSON.parse(response2.data)  \/\/\u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0442\u0435\u043b\u0430 \u043e\u0442\u0432\u0435\u0442\u0430 \u043e\u0442 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u0438 console.log(res_body)  \/\/\u0442\u0435\u043b\u043e \u043e\u0442\u0432\u0435\u0442\u0430 \u043e\u0442 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u043c expect(res_body).to.be.an('object')  \/\/\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043a\u043b\u044e\u0447\u0430 username \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u0442\u0440\u043e\u043a\u043e\u0439 expect(res_body.username).to.be.a('string')  \/\/\u043a\u043b\u044e\u0447 username \u043d\u0435 \u043f\u0443\u0441\u0442\u043e\u0439 expect(res_body.username).not.has.length(0)  \/\/\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043a\u043b\u044e\u0447\u0430 email \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u0442\u0440\u043e\u043a\u043e\u0439 expect(res_body.email).to.be.a('string')  \/\/\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043a\u043b\u044e\u0447\u0430 email \u043d\u0435 \u043f\u0443\u0441\u0442\u043e\u0439 expect(res_body.email).not.has.length(0)  \/\/\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430, \u0447\u0442\u043e \u0443 \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0435\u0441\u0442\u044c \u043e\u0436\u0438\u0434\u0430\u0435\u043c\u044b\u0435 \u043f\u043e\u043b\u044f const expected_keys = [ \"id\", \"name\", \"username\", \"email\", \"created\", \"updated\" ]  \/\/\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043e\u0436\u0438\u0434\u0430\u0435\u043c\u044b\u0445 \u043a\u043b\u044e\u0447\u0435\u0439 \u0432 \u0442\u0435\u043b\u0435 \u043e\u0442\u0432\u0435\u0442\u0430 \u043e\u0442 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 expect(res_body).to.have.all.keys(expected_keys)  \/\/\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0442\u043e\u0433\u043e, \u043a\u043b\u044e\u0447\u0438 \u0432 \u043e\u0442\u0432\u0435\u0442\u0435 \u043e\u0442 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0440\u0430\u0432\u043d\u044b \u043a\u0430\u043a\u043e\u043c\u0443-\u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044e expect(res_body.username).to.equal(\"&lt;\u0423\u043a\u0430\u0437\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0438\u0437 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f>\") expect(res_body.email).to.equal(\"&lt;\u0423\u043a\u0430\u0437\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0438\u0437 \u043e\u043a\u043f\u0443\u0436\u0435\u043d\u0438\u044f>\")<\/code><\/pre>\n<p>\u0425\u043e\u0447\u0443 \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441 \u0447\u0435\u0440\u0435\u0437 &#171;Select a request&#187;, \u0430 \u043c\u043e\u0436\u043d\u043e \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441 \u0432\u043d\u0443\u0442\u0440\u0438 \u0441\u0430\u043c\u043e\u0433\u043e \u0442\u0435\u0441\u0442\u0430.<\/p>\n<p>\u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u044f \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044e \u0442\u0430\u043a:<\/p>\n<figure class=\"full-width\">\n<div><figcaption>\u041e\u0442\u043f\u0440\u0430\u0432\u043a\u0430 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0432\u043d\u0443\u0442\u0440\u0438 \u0442\u0435\u0441\u0442\u0430 \u0432\u043c\u0435\u0441\u0442\u043e \u043f\u043e\u043b\u044f \u201cSelect a request\u201d  <\/figcaption><\/div>\n<\/figure>\n<p><strong>\u041f\u0440\u0438\u043c\u0435\u0440\u044b \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432 \u0434\u043b\u044f \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f<\/strong> <\/p>\n<pre><code class=\"javascript\">\/\/\u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0430 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 POST \/login const response2 = await insomnia.send('req_c6319e16d41a4ed593fec04d92f7183c');  \/\/ \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0441\u0442\u0430\u0442\u0443\u0441 \u043a\u043e\u0434\u0430 expect(response2.status).to.equal(200);  const res_body = JSON.parse(response2.data) console.log(res_body)  \/\/\u0442\u0435\u043b\u043e \u043e\u0442\u0432\u0435\u0442\u0430 \u043e\u0442 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u043c expect(res_body).to.be.an('object')  \/\/\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043a\u043b\u044e\u0447\u0430 token \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u0442\u0440\u043e\u043a\u043e\u0439 expect(res_body.token).to.be.a('string')  \/\/\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043a\u043b\u044e\u0447\u0430 token \u043d\u0435 \u043f\u0443\u0441\u0442\u043e\u0435 expect(res_body.token).not.has.length(0) console.log(res_body.token)  \/\/\u043c\u043e\u0436\u043d\u043e \u043a\u043e\u043c\u0431\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u0447\u0435\u0440\u0435\u0437 .and expect(res_body.token).to.be.a('string').and.not.has.length(0)<\/code><\/pre>\n<p><strong>\u041f\u0440\u0438\u043c\u0435\u0440\u044b \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432 \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u043c \u043d\u0430 \u0441\u0430\u0439\u0442\u0435 (Create Project<\/strong>)<\/p>\n<pre><code class=\"javascript\">\/\/\u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0430 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 PUT \/projects const response2 = await insomnia.send('req_b8be8c6b91e24343af7e2c1ae1ffa7fc');  \/\/ \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0441\u0442\u0430\u0442\u0443\u0441 \u043a\u043e\u0434\u0430 201 expect(response2.status).to.equal(201);  const res_body = JSON.parse(response2.data) console.log(res_body)  \/\/\u0442\u0435\u043b\u043e \u043e\u0442\u0432\u0435\u0442\u0430 \u043e\u0442 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u043c expect(res_body).to.be.an('object')  \/\/\u0442\u0435\u043b\u043e \u043e\u0442\u0432\u0435\u0442\u0430 \u0438\u043c\u0435\u0435\u0442 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e (\u043a\u043b\u044e\u0447) id expect(res_body).to.have.property('id')  \/\/\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043a\u043b\u044e\u0447\u0430 id \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0447\u0438\u0441\u043b\u043e\u043c expect(res_body.id).to.be.a('number')  \/\/g\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0442\u043e\u0433\u043e, \u043a\u043b\u044e\u0447 \u0432 \u043e\u0442\u0432\u0435\u0442\u0435 \u043e\u0442 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0440\u0430\u0432\u0435\u043d \u043a\u0430\u043a\u043e\u043c\u0443-\u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044e expect(res_body.id).to.equal(&lt;\u0423\u043a\u0430\u0437\u0430\u0442\u044c \u043e\u0436\u0438\u0434\u0430\u0435\u043c\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435>) console.log(res_body.id)  \/\/\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043a\u043b\u044e\u0447\u0430 title \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u0442\u0440\u043e\u043a\u043e\u0439 expect(res_body.title).to.be.a('string')  \/\/\u043f\u0440\u043e\u0432\u0435\u043a\u0440\u0430 \u0443\u043a\u0430\u0437\u0430\u043d\u0430 \u0441 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0435\u043c, \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0435\u0441\u043b\u0438 owner.username \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u044f\u0432\u043b\u044f\u0442\u044c\u0441\u044f \u0441\u0442\u0440\u043e\u043a\u043e\u0439 expect(res_body.owner.username, \"\u043f\u043e\u043b\u0435 username \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u043e\u0439\").to.be.a('string')  \/\/\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043a\u043b\u044e\u0447\u0430 is_archived \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f boolean expect(res_body.is_archived).to.equal(false)<\/code><\/pre>\n<p><strong>\u041f\u0440\u0438\u043c\u0435\u0440\u044b \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432 \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0432\u0441\u0435\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 Get all Projects<\/strong><\/p>\n<pre><code class=\"javascript\">\/\/\u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0430 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 GET \/projects const response2 = await insomnia.send('req_716ace9255e34ac1970bfc7571dc6ab0');  \/\/\u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0441\u0442\u0430\u0442\u0443\u0441 \u043a\u043e\u0434\u0430 200 expect(response2.status).to.equal(200);  const res_body = JSON.parse(response2.data)  \/\/\u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u0435 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u044b \u0434\u043b\u044f \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u0432 \u043c\u0430\u0441\u0441\u0438\u0432\u0435 const project_id1 = res_body[0].id console.log(project_id1)  \/\/\u0434\u043b\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u0430 - \u0438 \u0442\u043e \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442 const expected_colors = [\"7f23ff\"]  \/\/\u0432 JavaScript \u0435\u0441\u0442\u044c \u043c\u0435\u0442\u043e\u0434 map \u0434\u043b\u044f \u0441\u043f\u0438\u0441\u043a\u043e\u0432, \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u044e\u0449\u0438\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u044e => \u043a \u043a\u0430\u0436\u0434\u043e\u043c\u0443 \u0438\u0437 \u0435\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \/\/\u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0433\u043e \u043a\u043b\u044e\u0447\u0430 const actual_colors = res_body.map(item => item.hex_color)  \/\/\u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430, \u0447\u0442\u043e \u0435\u0441\u0442\u044c \u043a\u043b\u044e\u0447, \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u043d\u044b\u0439 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c expect(actual_colors).to.include.members(expected_colors) console.log(actual_colors)  \/\/\u0435\u0441\u0442\u044c \u0435\u0449\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043d\u0430 \u0441\u043f\u0438\u0441\u043e\u043a \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0441 \u043f\u043e\u043b\u044f\u043c\u0438, \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \/\/\u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f .to.include.deep.members  \/\/\u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0440\u0438\u043c\u0435\u0440 const values = [{\"hex_color\": \"7f23ff\", \"title\": \"project_title\"}, {\"hex_color\": \"7f23f0\", \"title\": \"project_title2\"}, {\"hex_color\": \"7f32ff\", \"title\": \"project_title3\"}]]] const expected_values = [{\"hex_color\": \"7f23ff\", \"title\": \"project_title\"}] expect(values).to.include.deep.members(expected)  \/\/\u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0438\u043c\u0435\u044e\u0449\u0438\u0435\u0441\u044f \u043e\u0436\u0438\u0434\u0430\u0435\u043c\u044b\u0435 \u043a\u043b\u044e\u0447\u0438 const keys = {\"hex_color\": \"7f23ff\", \"title\": \"project_title\"} const expected_keys = [\"hex_color\", \"title\"] expect(keys).to.include.all.keys(expected_keys)  \/\/\u0432 JavaScript \u0435\u0441\u0442\u044c Set \u0434\u043b\u044f \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \/\/\u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0433\u043e \u043a\u043b\u044e\u0447\u0430 hex_color const hex_colors = [\"7f23ff\", \"7f23fs\", \"7f05ff\",\"7f23ff\"] const unique_colors = new Set(hex_colors) expect(unique_colors).to.have.lengthOf(3) expect(unique_colors).to.have.all.keys(\"7f23ff\", \"7f23fs\", \"7f05ff\")  \/\/\u0435\u0441\u0442\u044c \u0435\u0449\u0435 \u043c\u0435\u0442\u043e\u0434 forEach - \u0446\u0438\u043a\u043b - \u043f\u043e \u043a\u0430\u0436\u0434\u043e\u043c\u0443 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0443  \/\/\u0438 \u043c\u0435\u0442\u043e\u0434 .filter \u0434\u043b\u044f \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 <\/code><\/pre>\n<p>\u0418\u0437 <a href=\"https:\/\/www.chaijs.com\/api\/bdd\/\" rel=\"noopener noreferrer nofollow\">https:\/\/www.chaijs.com\/api\/bdd\/<\/a> \u0438 <a href=\"https:\/\/docs.insomnia.rest\/insomnia\/unit-testing\" rel=\"noopener noreferrer nofollow\"><u>https:\/\/docs.insomnia.rest\/insomnia\/unit-testing<\/u><\/a>  \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438, \u0447\u0442\u043e\u0431\u044b \u0441\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0441\u0432\u043e\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043d\u0430 \u0432\u043a\u043b\u0430\u0434\u043a\u0435 tests.<\/p>\n<h2>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h2>\n<p>\u0412 \u0431\u0443\u0434\u0443\u0449\u0435\u043c \u0445\u043e\u0447\u0443 \u0437\u0430\u0442\u0440\u043e\u043d\u0443\u0442\u044c \u0442\u0435\u043c\u0443 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043f\u043b\u0430\u0433\u0438\u043d\u0430 \u0434\u043b\u044f Insomnia. \u042f \u043d\u0430 \u043f\u0443\u0442\u0438 \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u044f, \u0447\u0442\u043e\u0431 \u0442\u0430\u043a\u0436\u0435 \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u0441\u0432\u043e\u0438\u043c \u043e\u043f\u044b\u0442\u043e\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432.<\/p>\n<p>\u0422\u0430\u043a\u0436\u0435 \u044f \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043c\u043e\u0439 \u0432\u0435\u0431\u0438\u043d\u0430\u0440 \u043d\u0430 \u0442\u0435\u043c\u0443 &#171;\u0422\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 API \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c Insomnia&#187;<\/p>\n<div class=\"tm-iframe_temp\" data-src=\"https:\/\/embedd.srv.habr.com\/iframe\/65c2826ca5e031d47d42d357\" data-style=\"\" id=\"65c2826ca5e031d47d42d357\" width=\"\"><\/div>\n<p><strong><em>\u0411\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044e \u0437\u0430 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 \u0438 \u043f\u0440\u043e\u0447\u0442\u0435\u043d\u0438\u0435.<\/em><\/strong><\/p>\n<p>\u0421 \u0443\u0432\u0430\u0436\u0435\u043d\u0438\u0435\u043c, \u041d\u0430\u0434\u0435\u0436\u0434\u0430 \u0414\u0443\u0434\u043d\u0438\u043a (<a href=\"https:\/\/t.me\/protestinginfo\" rel=\"noopener noreferrer nofollow\">protestinginfo<\/a>), \u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u0438\u043d\u0436\u0435\u043d\u0435\u0440 \u043f\u043e \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044e \u0432 \u0444\u0438\u043d\u0442\u0435\u0445\u0435 \u0438 \u043c\u0435\u043d\u0442\u043e\u0440 \u043f\u043e \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044e \u041f\u041e.<\/p>\n<p>\u0418 \u0436\u0435\u043b\u0430\u044e \u0434\u043e\u0441\u0442\u0438\u0447\u044c \u0441\u0432\u043e\u0435\u0439 \u0446\u0435\u043b\u0438!<\/p>\n<\/p>\n<\/div>\n<\/div>\n<\/div>\n<p><!----><!----><\/div>\n<p><!----><!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/791826\/\"> https:\/\/habr.com\/ru\/articles\/791826\/<\/a><br \/><\/br><\/br><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-367466","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/367466","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=367466"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/367466\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=367466"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=367466"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=367466"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}