Ложный сервис LDAP для тестирования интеграции с супертестом и жасмином
Мне нужно провести интеграционный тест для маршрута, который использует службу LDAP для получения данных. Но вместо того, чтобы вызывать реальный сервис LDAP, я хочу MOCK сервис. Я старался nock
но дает ошибку nock Cannot read property 'replace' of null
,
Ниже мой текущий код:
Route.js
router.get('/admin/user', authController.validateToken, userRolePermission.validate('USRPERM'), controller.searchUsersByOrganization);
Controller.js
function searchUsersByOrganization(req, res) {
adminService.searchUsersByOrganization({
organization: req.query.organization
})
.then(data => {
res.send(data);
})
.catch(err => {
res.status(500).send(undefined);
});
}
Service.js
function searchUsersByOrganization(filter) {
const search_options = {
base: 'ou=test portal,ou=People,dc=myfamily,dc=com',
scope: LDAP.SUBTREE,
filter: '(o=' + filter.organization + ')',
attrs: '*'
};
return adminSearchUserService.searchUsers(search_options).then(data => transformService.transform(data));
}
AdminSearchUserService
function searchUsers(search_options) {
return new Promise((resolve, reject) => {
const ldap = new LDAP({
uri: 'ldap://your_server:123', // string
validatecert: false, // Verify server certificate
connecttimeout: -1, // seconds, default is -1 (infinite timeout), connect timeout
base: 'dc=com', // default base for all future searches
attrs: '*', // default attribute list for future searches
filter: '(objectClass=*)', // default filter for all future searches
scope: LDAP.SUBTREE // default scope for all future searches
}, ((err) => {
if(err) {
//logger.error('LDAP Error : ' + err.message);
//reject('Error retrieving users from LDAP');
}
ldap.starttls((err) => {
if(err) {
logger.error('LDAP Error Starting TLS connection : ' + err.message);
reject('Error retrieving users from LDAP');
}
ldap.installtls();
if(ldap.tlsactive() !== 1) {
logger.error('LDAP Error : TLS not active');
reject('Error retrieving users from LDAP');
}
ldap.bind({
binddn: 'cn=secretkey' + ',ou=Applications,dc=myfamily,dc=com',
password: config.ldap.bind_secret
}, (err) => {
if(err) {
logger.error('LDAP error while binding : ' + err.message);
reject('Error retrieving users from LDAP');
}
ldap.search(search_options, (err, data) => {
resolve(data);
});
});
});
}));
});
}
Интеграционное тестирование для маршрута '/api/admin/user' Ниже контрольного примера я хочу смоделировать службу LDAP. Я не получаю способ высмеять это.
it('GET: should response 200 and get users list as per organization', done => {
function searchUsersByOrganizationAssert() {
request.get('/api/admin/user')
.set({
authorization: 'Bearer ' + globalUserToken
})
.query({organization: 'Test Organization'})
.expect(expectedUsersListMockData)
.expect(statusCodes.SUCCESS_OK)
.end(onEndTestcase(done));
}
getUserTokenService(searchUsersByOrganizationAssert);
});