Files
ZYZ/game-server/test/task.test.ts
2021-11-05 17:37:50 +08:00

207 lines
7.4 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import { Client } from './Client';
import 'mocha';
import { PinusWSClient } from 'pinus-robot-plugin';
import { expect } from 'chai';
import { checkSuccessResponse, checkDisplayItems } from './CheckPatten';
import { DEBUG_MAGIC_WORD } from '../app/consts';
import { TASK_FUN_TYPE } from '../../shared/consts';
describe('任务测试', function () {
let pinusClient: PinusWSClient;
let roleInfo;
before(function (done) {
const c = new Client();
const timer = setInterval(() => {
if (c.client) {
pinusClient = c.client;
roleInfo = c.roleInfo;
clearInterval(timer);
done();
}
}, 1000);
});
after(function (done) {
pinusClient.disconnect();
// disconnect 后等待 500ms供服务器清理环境、退出频道等
setTimeout(() => {
done();
}, 500);
});
it('检查entery中返回的任务状态', function (done) {
checkMainTask(roleInfo.mainTask);
checkDailyTask(roleInfo.dailyTask);
checkAchievement(roleInfo.achievement);
checkPvpTask(roleInfo.pvpTask);
done();
});
it('检查领取主线任务', function (done) {
const type = TASK_FUN_TYPE.MAIN;
// 完成所有主线任务
pinusClient.request('role.taskHandler.debugRefTask', { magicWord: DEBUG_MAGIC_WORD, type }, (res) => {
checkSuccessResponse(res);
pinusClient.request('role.taskHandler.debugCompleteMainStage', { magicWord: DEBUG_MAGIC_WORD, type }, (res) => {
checkSuccessResponse(res);
expect(res.data.mainTask.taskList).to.be.an('array');
expect(res.data.mainTask.stage).to.be.a('number');
let promiseFuns = res.data.mainTask.taskList.map(task => {
return receiveTaskPromise(pinusClient, { type, id: task.id });
});
Promise.all(promiseFuns).then(() => {
pinusClient.request('role.taskHandler.receiveMainStage', { stage: res.data.mainTask.stage }, (res) => {
checkSuccessResponse(res);
checkMainTask(res.data);
checkDisplayItems(res.data.goods);
done();
})
})
});
});
});
it('检查领取每日任务', function (done) {
checkReceiveTask(pinusClient, done, TASK_FUN_TYPE.DAILY);
});
it('检查领取成就', function (done) {
checkReceiveTask(pinusClient, done, TASK_FUN_TYPE.ACHIEVEMENT);
});
it('领取每日活跃奖励', function (done) {
const type = TASK_FUN_TYPE.DAILY;
// 完成所有主线任务
pinusClient.request('role.taskHandler.debugRefTask', { magicWord: DEBUG_MAGIC_WORD, type }, (res) => {
checkSuccessResponse(res);
pinusClient.request('role.taskHandler.debugIncPoint', { magicWord: DEBUG_MAGIC_WORD, type, point: 500 }, (res) => {
checkSuccessResponse(res);
pinusClient.request('role.taskHandler.receiveActiveReward', {}, (res) => {
checkSuccessResponse(res);
expect(res.data.point).to.be.a('number');
checkDisplayItems(res.data.goods);
done();
})
});
});
});
it('检查领取pvp任务', function (done) {
checkReceiveTask(pinusClient, done, TASK_FUN_TYPE.PVP);
});
it('领取每周活跃奖励', function (done) {
checkReceiveBox(pinusClient, done, TASK_FUN_TYPE.DAILY)
});
it('领取成就积分宝箱', function (done) {
checkReceiveBox(pinusClient, done, TASK_FUN_TYPE.ACHIEVEMENT)
});
});
function receiveTaskPromise(pinusClient, param) {
return new Promise(resolve => {
receiveTask(pinusClient, param, resolve)
})
}
function receiveTask(pinusClient, param, resolve) {
pinusClient.request('role.taskHandler.receiveTask', param, (res) => {
checkSuccessResponse(res);
expect(res.data.type).to.be.a('number');
expect(res.data.id).to.be.a('number');
expect(res.data.count).to.be.a('number');
expect(res.data.received).equal(true);
expect(res.data.point).to.be.a('number');
expect(res.data.weeklyPoint).to.be.a('number');
checkDisplayItems(res.data.goods);
resolve();
});
}
// 检查领取
function checkReceiveTask(pinusClient, done, type: number) {
// 清空任务
pinusClient.request('role.taskHandler.debugRefTask', { magicWord: DEBUG_MAGIC_WORD, type }, (res) => {
checkSuccessResponse(res);
// 完成一个任务
pinusClient.request('role.taskHandler.debugCompleteRandTask', { magicWord: DEBUG_MAGIC_WORD, type }, (res) => {
checkSuccessResponse(res);
expect(res.data.task).to.be.an('object');
expect(res.data.task.id).to.be.a('number');
receiveTask(pinusClient, { type, id: res.data.task.id }, done);
});
});
}
// 检查主线任务数据
export function checkMainTask(mainTask) {
if (!mainTask) return;
expect(mainTask).to.be.an('object');
expect(mainTask.stage).to.be.a('number');
expect(mainTask.taskList).to.be.an('array');
mainTask.taskList.forEach(task => checkSingleTask(task));
}
// 检查日常任务数据
export function checkDailyTask(dailyTask) {
if (!dailyTask) return;
expect(dailyTask).to.be.an('object');
expect(dailyTask.point).to.be.a('number');
expect(dailyTask.weeklyPoint).to.be.an('number');
dailyTask.taskList.forEach(task => checkSingleTask(task));
dailyTask.box.forEach(id => {
expect(id).to.be.a('number');
})
}
// 检查成就
export function checkAchievement(achievement) {
if (!achievement) return;
expect(achievement).to.be.an('object');
expect(achievement.point).to.be.a('number');
achievement.taskList.forEach(task => checkSingleTask(task));
achievement.box.forEach(id => {
expect(id).to.be.a('number');
})
}
// 检查pvp任务数据
export function checkPvpTask(pvpTask) {
if (!pvpTask) return;
expect(pvpTask.taskList).to.be.an('array');
pvpTask.taskList.forEach(task => checkSingleTask(task));
}
// 检查在taskList中的某一个任务数据
function checkSingleTask(task) {
expect(task).to.be.an('object');
expect(task.type).to.be.a('number');
expect(task.id).to.be.a('number');
expect(task.count).to.be.a('number');
expect(task.received).to.be.a('boolean');
}
function checkReceiveBox(pinusClient, done, type: number) {
// 完成所有主线任务
pinusClient.request('role.taskHandler.debugRefTask', { magicWord: DEBUG_MAGIC_WORD, type }, (res) => {
checkSuccessResponse(res);
pinusClient.request('role.taskHandler.debugIncPoint', { magicWord: DEBUG_MAGIC_WORD, type, point: 500 }, (res) => {
checkSuccessResponse(res);
pinusClient.request('role.taskHandler.receiveBox', { type, id: 1 }, (res) => {
checkSuccessResponse(res);
expect(res.data.type).to.be.a('number');
expect(res.data.point).to.be.a('number');
expect(res.data.weeklyPoint).to.be.a('number');
res.data.box.forEach(id => {
expect(id).to.be.a('number');
})
checkDisplayItems(res.data.goods);
done();
})
});
});
}