VueJS + Karma + Webpack 4:不运行任何测试

时间:2019-03-08 09:16:06

标签: vue.js webpack karma-runner karma-webpack webpack-encore

最近,我决定从webpack 3迁移到webpack4。在我开始运行测试之前,它几乎可以正常工作。如果我的应用程序确实运行良好,那么Karma不会检测到任何测试。

我在包装程序(symfony encore)中使用了webpack,效果很好。我将所有软件包都升级到了最新版本,但是没有用。我添加了一个不依赖Vue的测试文件,然后检测到并运行了该测试。

所以我可以说Karma尝试加载VueJS规范文件,但是当测试尝试导入SingleFileComponent(每个示例为Movie.component.vue)时,它将停止,而不会发出任何警告。因此,问题可能与可能无法正常工作的预处理器有关。

这是业力配置和Webpack Encore配置:

const ManifestPlugin = require('webpack-manifest-plugin');
const webpackConfig = require('./karma.webpack.config.babel');
const webpack = require('webpack');

// Configure specific plugin
for (const plugin of webpackConfig.plugins) {
    // Set writeToFileEmit option of the ManifestPlugin to false
    if ((plugin instanceof ManifestPlugin) && plugin.opts) {
        plugin.opts.writeToFileEmit = false
    }
}

// Remove entry property (handled by Karma)
delete webpackConfig.entry;

// Karma options
module.exports = function (config) {
    config.set({
        frameworks: ['jasmine'],

        files: [
            './assets/js/vuejs/tests/DebugKarma.spec.js',
            './assets/js/vuejs/tests/Movie.spec.js'
        ],

        preprocessors: {
            './assets/js/vuejs/tests/DebugKarma.spec.js': ['webpack'],
            './assets/js/vuejs/tests/Movie.spec.js': ['webpack']
        },

        browsers: ['Chrome'],

        webpack: webpackConfig,

        webpackMiddleware: {
            stats: 'errors-only',
            noInfo: true,
        },

        plugins: [
            require('karma-webpack'),
            require('karma-jasmine'),
            require('karma-chrome-launcher'),
            require('karma-spec-reporter'),
            require('karma-junit-reporter'),
            require('karma-jasmine-html-reporter'),
        ],

        chromeLauncher: {
            exitOnResourceError: false
        },

        reporters: ['kjhtml', 'spec', 'junit'],

        junitReporter: {
            outputDir: './var/report', // results will be saved as $outputDir/$browserName.xml
            outputFile: 'karma.xml', // if included, results will be saved as $outputDir/$browserName/$outputFile
            suite: '', // suite will become the package name attribute in xml testsuite element
            useBrowserName: false, // add browser name to report and classes names
            nameFormatter: undefined, // function (browser, result) to customize the name attribute in xml testcase element
            classNameFormatter: undefined, // function (browser, result) to customize the classname attribute in xml testcase element
            properties: {}, // key value pair of properties to add to the <properties> section of the report
            xmlVersion: 1 // use '1' if reporting to be per SonarQube 6.2 XML format
        },

        autoWatch: true,
    });
}
const Encore = require('@symfony/webpack-encore')

Encore
    .configureRuntimeEnvironment('dev-server')
    // the project directory where compiled assets will be stored
    .setOutputPath('./var/tests/karma/')
    .setPublicPath('/')
    .cleanupOutputBeforeBuild()
    .disableSingleRuntimeChunk()
    .addEntry()

    .enableSassLoader(function(sassOptions) {}, {
        resolveUrlLoader: false,
    })

    .enableVueLoader()

let config = Encore.getWebpackConfig();

module.exports = config

这是我的package.json的一部分

"dependencies": {
        "@api-platform/admin": "^0.6.2",
        "@rebolon/json-reviver": "0.0.7",
        "apollo-cache-inmemory": "^1.5.1",
        "apollo-client": "^2.5.1",
        "apollo-link": "^1.2.9",
        "apollo-link-error": "^1.1.8",
        "apollo-link-http": "^1.5.12",
        "axios": "^0.18.0",
        "devextreme": "^18.2.6",
        "devextreme-vue": "^18.2.6",
        "graphql": "^14.1.1",
        "graphql-tag": "^2.10.1",
        "offline-plugin": "^5.0.6",
        "prop-types": "^15.7.2",
        "quasar-extras": "^1.0.3",
        "quasar-framework": "^0.15.15",
        "react": "^16.8.3",
        "react-dom": "^16.8.3",
        "rxjs": "^6.4.0",
        "uglifyjs-webpack-plugin": "^2.1.2",
        "vue": "^2.6.8",
        "vue-apollo": "^3.0.0-beta.28",
        "vue-router": "^3.0.2",
        "vuelidate": "^0.7.4"
    },
    "devDependencies": {
        "@angular/cli": "^7.3.4",
        "@babel/preset-env": "^7.3.4",
        "@babel/preset-react": "^7.0.0",
        "@symfony/webpack-encore": "^0.24.0",
        "bootstrap": "^4.3.1",
        "create-react-app": "^1.5.2",
        "jasmine": "^3.3.1",
        "karma": "^4.0.1",
        "karma-chrome-launcher": "^2.2.0",
        "karma-jasmine": "^2.0.1",
        "karma-jasmine-html-reporter": "^1.4.0",
        "karma-junit-reporter": "^1.2.0",
        "karma-spec-reporter": "0.0.32",
        "karma-webpack": "^3.0.5",
        "node-sass": "^4.11.0",
        "prettier": "^1.16.4",
        "rxjs-tslint": "^0.1.7",
        "sass-loader": "^7.1.0",
        "stylus": "^0.54.5",
        "stylus-loader": "^3.0.2",
        "ts-loader": "^5.3.3",
        "vue-loader": "^15.7.0",
        "vue-template-compiler": "^2.6.8"
    },
    "browserslist": "> 1%"

最后,因果报应输出,我们只能看到DebugKarma结果,而不能看到Movie结果:

npm run test-karma

> sf-flex-encore-vuejs@0.0.1 test-karma php-sf-flex-webpack-encore-vuejs
> karma start karma.conf.js --single-run

(node:20628) DeprecationWarning: Tapable.plugin is deprecated. Use new API on `.hooks` instead
i 「wdm」: wait until bundle finished: noop
i 「wdm」: wait until bundle finished: noop
 DONE  Compiled successfully in 1235ms                                                                                                                                                                    10:10:06

i 「wdm」:
i 「wdm」: Compiled successfully.
08 03 2019 10:10:06.850:INFO [karma-server]: Karma v4.0.1 server started at http://0.0.0.0:9876/
08 03 2019 10:10:06.853:INFO [launcher]: Launching browsers Chrome with concurrency unlimited
08 03 2019 10:10:06.872:INFO [launcher]: Starting browser Chrome
08 03 2019 10:10:08.582:INFO [Chrome 72.0.3626 ]: Connected on socket hy9Imp7g7Qgdq0WuAAAA with id 25037598
Chrome 72.0.3626  INFO: 'This log message must be displayed in devTools of Karma browser'
Chrome 72.0.3626  INFO LOG: 'This log message must be displayed in devTools of Karma browser'

  Debug Karma conf
    √ config is ok
TOTAL: 1 SUCCESS

Chrome 72.0.3626 : Executed 1 of 1 SUCCESS (0.007 secs / 0.001 secs)
TOTAL: 1 SUCCESS

您可以在此处获得整个项目:https://github.com/Rebolon/php-sf-flex-webpack-encore-vuejs/tree/feature/move-on-webpack4

欢迎任何提示,我真的不知道该如何解决(也不怎么调试)。

谢谢

0 个答案:

没有答案