簡體   English   中英

測試數組和函數摩卡javascript-如何訪問函數並編寫測試

[英]testing array and function mocha javascript - how to get access to function and write tests

我有以下代碼在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 test/appTest.js編寫測試,但是我不知道如何訪問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);
        });
    });
})

還可以嗎?

是的,您需要導出對象-

'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來匹配模塊號,那么我想只需檢查您知道將返回的各個值就足夠了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM