Mocha 测试小用例

作者: 方寸拾光 | 来源:发表于2018-04-15 10:39 被阅读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

    相关文章

      网友评论

        本文标题:Mocha 测试小用例

        本文链接:https://www.haomeiwen.com/subject/anhdkftx.html