【问题标题】:testing array and function mocha javascript - how to get access to function and write tests测试数组和函数 mocha javascript - 如何访问函数和编写测试
【发布时间】:2017-10-22 14:21:46
【问题描述】:

我有这段代码可以在index.js 文件中编写测试:

'use strict'
const activeModules = [
    { name: 'module 1' },
    { name: 'module 2' },
    { name: 'module 11' },
    { name: 'module 3' },
    { name: 'module 10' }
];
const getCustomModuleNumber = _ =>
    Math.max(...activeModules.map( n =>
        n.name.match("\\d+")
    ));

我想在 mocha chai 中编写测试,但我不知道如何访问 test/appTest.js 中的函数

const assert = require('chai').assert;

const app = require('../index');

activeModulesResult = app.activeModules;
getCustomModuleNumberResult = app.getCustomModuleNumber;

describe('App', function() {
    it('activeModules should be type array', function() {
        assert.typeOf(activeModulesResult, 'array');
    });

    it('getCustomModuleNumber should be type number', function() {
        assert.typeOf(getCustomModuleNumberResult, 'number');
    });
})

控制台使用getCustomModuleNumber is undefined 显示错误,或者当我添加getCustomModuleNumber() 时显示这不是函数。

1. 我的项目只包含index.js 文件和测试所需的文件。什么是最好的测试方法,为什么?也许我需要添加到index.js 文件module.exports?哪种解决方案是最优化的,并且符合干净代码和 ES6 的原则?

2.我应该写什么测试?我知道我应该检查getCustomModuleNumber函数是否返回11,它返回的type,但我完全不知道我是否应该检查该函数的其他组件?

编辑:

我写过这样的测试:

const assert = require('chai').assert;
const app = require('../index').main;

activeModulesResult = app.activeModules;
getCustomModuleNumberResult = app.getCustomModuleNumber();
describe('App', function() {
    describe('activeModules', function(){
        it('activeModules should be type array', function() {
            assert.isArray(activeModulesResult);
        });
        it('activeModules has the same members', function() {
            const testArray = [
                { name: 'module 1' },
                { name: 'module 2' },
                { name: 'module 11' },
                { name: 'module 3' },
                { name: 'module 10' },
            ];
            assert.includeDeepMembers(activeModulesResult, testArray , 'same members');
        });
    });
    describe('getCustomModuleNumber', function(){
        it('getCustomModuleNumber should be type number', function() {
            assert.isNumber(getCustomModuleNumberResult);
        });
        it('getCustomModuleNumber should return 11', function() {
            assert.equal(getCustomModuleNumberResult, 11);
        });
    });
})

没关系,仅此而已?

【问题讨论】:

    标签: javascript unit-testing testing mocha.js chai


    【解决方案1】:

    是的,您需要导出对象 -

    'use strict'
    exports.activeModules = [
        { name: 'module 1' },
        { name: 'module 2' },
        { name: 'module 11' },
        { name: 'module 3' },
        { name: 'module 10' }
    ];
    exports.getCustomModuleNumber = () => Math.max(
        ...activeModules.map( n => n.name.match("\\d+"))
    );
    

    其次,如果您的所有功能都使用regex 匹配模块编号,那么我想只需检查您知道将返回的相应值就足够了。

    【讨论】:

      猜你喜欢
      • 2010-12-21
      • 1970-01-01
      • 2017-12-12
      • 2015-07-25
      • 2014-02-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多