Web Developer我爱编程程序员

Mocha 测试小用例

2018-04-15  本文已影响20人  方寸拾光


mocha

# make-appointments


Make appointments to learn course!

#需求(学生、老师、班级、课程)


- 假设共有n节课

- 一堂课可以最多4个学生1个老师

- 但学生需要按需选择时间学习

- 老师有自己固定的教课时间

- 以周为单位进行选课

- 1周最多有7天可学,1天最多有4节课,上午下午各两节

    ? 如何设计使效率更高,资源利用率更高

#设计思路


- 先确定老师的可用时间;

- 根据老师时间确定每个时间段的最大学生数;

- 采用抢选策略,选满为止

#代码实现-- “测试驱动开发”(TDD:Test-Driven Development)


- 选用mocha单元测试框架

mocha是JavaScript的一种单元测试框架,既可以在浏览器环境下运行,也可以在Node.js环境下运行。使用mocha,我们就只需要专注于编写单元测试本身,然后,让mocha去自动运行所有的测试,并给出测试结果。

- 创建make-appointments-for-teacher.js引入断言库 

const assert = require('assert');

- 编写第一个测试可能(假设所有老师都不选择可用时间)

describe('Make Appointments for teachers:', () => {

    it('1.Week schedule should be [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]', () => {

        assert.deepEqual(teacherDecide([[], [], []]), [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]);

    })

});

- 编写测试函数teacherDecide(这里有些跳步,不符合TDD开发流程,大家自己研究具体开发过程)

const teacherDecide = (decision) => {

    let maximumSchedule = [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]];

    for (i = 0; i < decision.length; i++) {

        for (j = 0; j < decision[i].length; j++) {

            const element = decision[i][j];

            maximumSchedule[parseInt(element / 10) - 1][element % 10 - 1]+=4;

        };

    }

    return maximumSchedule;

}

- 运行测试

mocha make-appointments-for-teacher.js

- 成功后编写其他可能测试(假如选择[32,43]则代表该老师选择了周三第二节和周四第三节):

describe('Make Appointments for teachers:', () => {

    it('1.Week schedule should be [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]', () => {

        assert.deepEqual(teacherDecide([[], [], []]), [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]);

    })

    it('2.Week schedule should be [[0, 0, 0, 0], [0, 0, 0, 0], [0, 4, 0, 0], [0, 0, 4, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]', () => {

        assert.deepEqual(teacherDecide([[32, 43], [], []]), [[0, 0, 0, 0], [0, 0, 0, 0], [0, 4, 0, 0], [0, 0, 4, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]);

    })

    it('3.Week schedule should be [[0, 0, 0, 0], [0, 0, 0, 0], [0, 8, 0, 0], [0, 0, 4, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]', () => {

        assert.deepEqual(teacherDecide([[32, 43], [32], []]), [[0, 0, 0, 0], [0, 0, 0, 0], [0, 8, 0, 0], [0, 0, 4, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]);

    })

    it('4.Week schedule should be [[0, 0, 0, 0], [0, 0, 0, 0], [0, 12, 0, 0], [0, 0, 4, 0], [4, 4, 0, 0], [0, 0, 8, 0], [0, 0, 0, 4]]', () => {

        assert.deepEqual(teacherDecide([[32, 43,51], [32,52,63], [32,63,74]]), [[0, 0, 0, 0], [0, 0, 0, 0], [0, 12, 0, 0], [0, 0, 4, 0], [4, 4, 0, 0], [0, 0, 8, 0], [0, 0, 0, 4]]);

    })

}) 

- 同理创建make-appointments-for-learner.js并执行测试

#参考代码我已放到Github,欢迎git clone,欢迎评论,欢迎指正

https://github.com/JimmieMax/make-appointments

上一篇下一篇

猜你喜欢

热点阅读