2014-02-01 5 views
1

У меня возникли проблемы с тестированием модулей Express на нескольких фронтах, кажется, что у него отсутствует документация и общая информация в Интернете об этом.Экспресс-контроллеры Unit Testing

До сих пор я обнаружил, что могу проверить свои маршруты с помощью библиотеки supertest (https://github.com/visionmedia/superagent), но что, если я сломал свои маршруты и контроллеры, как я могу проверить тестирование своих контроллеров независимо от их маршрутов.

вот мой тест:

describe("Products Controller", function() { 
    it("should add a new product to the mongo database", function(next) { 
     var ProductController = require('../../controllers/products'); 
     var Product = require('../../models/product.js'); 

     var req = { 
      params: { 
       name: 'Coolest Product Ever', 
       description: 'A very nice product' 
      } 
     }; 

     ProductController.create(req, res); 

    }); 
}); 

REQ достаточно легко смоделируйте. res не так много, я попытался захватить express.response, надеясь, что я мог бы просто ввести его, но это не сработало. Есть ли способ имитации объекта res.send? Или я ошибаюсь по этому поводу?

+0

Какие методы/свойства вы используете для объекта ответа? Код, который вы опубликовали до сих пор, похоже, использует объект запроса и вызывает «next». – max

+0

Привет Макс, я использую res.send, я отредактирую и удалю этот прокомментированный код, поскольку он вводит в заблуждение – Melbourne2991

ответ

0

Когда вы тестируете свои маршруты, вы фактически не используете встроенные функции. Скажем, например, ProductController.create (req, res);

Что вам в основном нужно сделать, запустите сервер на порту и отправьте запрос для каждого URL-адреса. Как вы упомянули выше, вы можете следовать этому коду.

describe("Products Controller", function() { 
    it("should add a new product to the mongo database", function(next) { 
     const request = require('superagent'); 
     request.post('http://localhost/yourURL/products') 
      .query({ name: 'Coolest Product Ever', description: 'A very nice product' }) 
      .set('Accept', 'application/json') 
      .end(function(err, res){ 
       if (err || !res.ok) { 
        alert('Oh no! error'); 
       } else { 
        alert('yay got ' + JSON.stringify(res.body)); 
       } 
     }); 
    }); 
}); 

Вы можете обратиться к суперагент примеры запроса here.