Pull to refresh

Храните ваши клятвы; Отношения с Node

Node.JS
Translation
Original author: Dion Almaer
Клятвы могут быть прекрасны. Алексис Селлир, сыскавший славу за разработку «LESS» (и «less.js»), начинает становиться звездой Open Source, выпустив в свет Vows, — каркас для разработки на Node.JS, управляемой асинхронным поведением.

image

Если такую спецификацию BDD мы подадим на вход:
  1. // division-by-zero-test.js
  2. var vows = require('vows'),
  3. assert = require('assert');
  4. // Create a Test Suite
  5. vows.describe('Division by Zero').addBatch({
  6. 'when dividing a number by zero': {
  7. topic: function () { return 42 / 0 },
  8. 'we get Infinity': function (topic) {
  9. assert.equal (topic, Infinity);
  10. }
  11. },
  12. 'but when dividing zero by zero': {
  13. topic: function () { return 0 / 0 },
  14. 'we get a value which': {
  15. 'is not a number': function (topic) {
  16. assert.isNaN (topic);
  17. },
  18. 'is not equal to itself': function (topic) {
  19. assert.notEqual (topic, topic);
  20. }
  21. }
  22. }
  23. }).run(); // Run it


То на выходе мы получим великолепно читаемый отчёт:
Выхлоп

С макросами в итоге мы получаем удобный DSL-синтаксис, например:
  1. { 'GET /': {
  2. topic: api.get('/'),
  3. 'shoud respond with a 200 OK': assertStatus(200)
  4. },
  5. 'POST /': {
  6. topic: api.post('/'),
  7. 'shoud respond with a 405 Method not allowed': assertStatus(405)
  8. },
  9. 'GET /resources (no api-key)': {
  10. topic: api.get('/resources'),
  11. 'shoud respond with a 403 Forbidden': assertStatus(403)
  12. },
  13. 'GET /resources?apikey=af816e859c249fe'
  14. topic: api.get('/resources?apikey=af816e859c249fe'),
  15. 'shoud return a 200 OK': assertStatus(200),
  16. 'should return a list of resources': function (res) {
  17. assert.isArray (res.body);
  18. }
  19. }
  20. }
  21. // or even
  22. {
  23. 'GET /': respondsWith(200),
  24. 'POST /': respondsWith(405),
  25. 'GET /resources (no key)': respondsWith(403)
  26. }


На сайте проекта подробно описаны процесс установки, примеры использования и т.д. Кстати, сделан сайт очень прилично, с использованием HTML5-разметки.

от переводчика: Название статьи на английском языке обыгрывает название проекта — Vows (клятвы).
Tags:VowsBDDасинхронное программированиеnode.jsсерверный javascriptdsl
Hubs: Node.JS
Total votes 36: ↑20 and ↓16+4
Views1.1K

Popular right now