【发布时间】:2018-09-18 22:56:25
【问题描述】:
我有一个服务使用cote 库调用另一个服务。我想知道如何设计服务以便于测试。
'use strict';
const logger = require('../../../helper/logger');
const Player = require('../../model/player_model/player_model');
const crypto = require('./../../../helper/crypto_helper');
const cote = require('cote');
let requester = new cote.Requester({name: 'findOnePlayer requester'});
/**
* Creates new player in database
* @param username / must be unique
* @param password
* @returns {Promise<Player>}
*/
module.exports.createPlayer = async (username, password) => {
if (!(username && password && username.length && password.length)) {
throw new Error('Both username and password are required');
}
const request = {type: 'findOnePlayer', username: username};
const existingPlayer = await requester.send(request);
if (existingPlayer) {
throw new Error('Username is already taken');
}
const password_salt = crypto.genRandomString(16);
/** Gives us salt of length 16 */
const password_data = crypto.sha512(password, password_salt);
const player = new Player({username: username, password_hash: password_data.password_hash, password_salt: password_data.salt});
// save user
return await player.save();
};
我想模拟请求者对象的这个方法const existingPlayer = await requester.send(request);。但是 requester 对象被用作 cote 库的构造函数。
对我应该寻找/调查的内容有任何帮助或指导吗?
谢谢
【问题讨论】: