UI5 - 如何在没有 allTests 文件的情况下 运行 Karma,运行ning 文件夹中的所有测试

UI5 - how to run Karma without allTests file, running all tests from the folder

我目前正在为 UI5 Web 应用程序准备一些单元测试 POC。为了运行他们,我们想用业力运行ner。在它的安装指南中,我看到了这个

All tests should be listed in specific files. You can, for example, collect all unit tests in an allTests.js file. With the help of this file, Karma can find all tests that belong to specific modules or components.

    client: {
      openui5: {
        tests: [
          'test/unit/allTests',
          'test/integration/AllJourneys'

使用allTests.js文件,我确实能够执行单元测试。但是,现在我在想是否绝对有必要使用这个 allTests.js 文件 - 因为现在,当我们将新的 .js 测试添加到我们的测试范围时,我们还需要将其路径添加到 allTests.js 文件这似乎是额外的工作(如果忘记了也是问题的根源)。

我认为如果 "test/unit" 路径中的所有 .js 文件都由 Karma 执行而不需要将它们全部收集到一个文件中会更好.但是,我还没有在网上找到任何方法来做到这一点,到目前为止我的实验都失败了。例如,我删除了配置文件的 openui5/tests 部分,并尝试在 files 部分中定义加载测试,如下所示

files: ['https://openui5.hana.ondemand.com/1.65.1/resources/sap-ui-core.js', 'test/unit/*.js'],

有人可以建议吗?是否可以绕过 allTests.js 文件,如果可以,该怎么做?谢谢你。

最后,我们按照 Ji aSH 的建议做了 - 在每次测试 运行 开始时,我们 运行 一个脚本来收集 [=13] 中所有 .js 文件的名称=] 文件夹并从中创建 allTests.js 文件。像这样

const fs = require('fs');
const path = require('path');

// List all files in a directory in Node.js recursively in a synchronous fashion
const walkSync = function (dir, filelist) {

    if (dir[dir.length - 1] != path.sep) dir = dir.concat(path.sep)

    const files = fs.readdirSync(dir);
    filelist = filelist || [];
    files.forEach(function (file) {
        if (fs.statSync(path.join(dir, file)).isDirectory()) {
            filelist = walkSync(path.join(dir, file), filelist);
        }
        else {
            if (path.extname(file) === '.js' && path.basename(file) !== 'allTests.js') {
                const filePath = `\n    '${dir}${path.basename(file, '.js')}'`;
                filelist.push(filePath.replace('webapp', path.join('xxx', 'xxxxl')));
            }
        }
    });
    return filelist;
};

const testFiles = walkSync(path.join('webapp', 'test', 'unit'), null);
const fileContent = `sap.ui.define([${testFiles},\n], () => { 'use strict'; });\n`;

fs.writeFileSync(path.join('webapp', 'test', 'unit', 'allTests.js'), fileContent);