2016-06-23 5 views
1

Я новичок в тестировании модулей sailsjs, nodejs и mocha. Кто-нибудь может дать мне несколько советов, как я могу написать единичный тест для следующего контроллера?Как написать модульный тест для контроллера sailsjs в мокко

getdata : function(req, res) { 
    User.findOne(req.id.query).populateAll() 
     .exec(function(err, res) { 
      if(err) { console.log(err); } 
      req.id = res; 
      return res.send(req.id); 
    }); 
}, 

конфигурации/route.js

module.exports.routes = { 
    'get /list/item': 'manager.getdata', 
} 

ответ

3

Ok, во-первых, создать тестовую папку в корневом каталоге приложения. Добавить любую структуру папок вы предпочитаете ... Вот скриншот с одного из горных проектов:

enter image description here

Я использую Supertest и должен ... Так что, если вы хотите скопировать вообще вставить вещи я введите, пожалуйста, здесь установить (вместе с мокко, конечно):

npm install supertest 
npm install should 

Далее, внутри bootstrap.test.js (проверьте изображение выше, чтобы увидеть, где поставить его, например) добавить конфигурацию, как:

var Sails = require('sails'); 

before(function (done) { 
    process.env.NODE_ENV = 'test'; 
    process.env.PORT = 9999; 

    Sails.lift({ 
     models: { 
      connection: 'localDiskDb', 
      migrate: 'drop' 
     } 
    }, function (err, server) { 
     sails = server; 
     if (err) return done(err); 

     sails.log.info('***** Starting tests... *****'); 
     console.log('\n'); 

     done(null, sails); 
    }); 
}); 

after(function (done) { 
    sails.lower(done); 
}); 

Теперь добавьте свой первый тест ... В вашем примере я бы поставил его в тест/интеграции/контроллеры/MyController.test.js

Это демонстрационный код, который вы можете использовать для теста:

var request = require('supertest'), 
    should = require('should'); 


describe('My controller', function() { 

    before(function (done) { 
     done(null, sails); 
    }); 


    it('should get data', function (done) { 
     request(sails.hooks.http.app) 
      .get('/list/item') 
      .send({id: 123, someOtherParam: "something"}) 
      .expect(200) 
      .end(function (err, res) { 
       if (err) return done(err); 

       should.exist(res.body); 

       done(); 
      }); 
    }); 
}); 

Теперь открыть файл mocha.opts (если вы запутались посмотреть на скриншоте выше) и добавить что-то вроде этого:

--bail 
--timeout 20s 
test/bootstrap.test.js 
test/integration/controllers/**/*.test.js 

Наконец, тип мокко в терминале внутри корневой папки для запуска тестов!

Вы также можете добавить скрипт в package.json так:

"scripts": { 
    "test": "mocha" 
    }, 

А потом просто запустить: тест НПМ

+0

так и в тесте, как я могу передать информацию id.query, поскольку в контроллер, требуется «req.id.query» – jacobcan118

+0

Я обновил свой ответ ... Проверьте демонстрационный код тестового поиска на строку: .send ({id: 123, someOtherParam: «something»}) ... Здесь я отправляю id = 123 на ваш маршрут, и вы можете получить его с помощью req.param ('id') ... Ваш контроллер может выглядеть так: User.findOne (req.param ('id'). populateAll(). не уверен, где вы видели синтаксис req.id.query .... – hlozancic

+0

Нужна дополнительная помощь :)? – hlozancic