升级Cucumber 2.4-> 4.0失败:无法加载此类文件-Cucumber / Core / Gerkin / tag_expression(LoadError)

时间:2019-02-14 21:27:55

标签: ruby cucumber

将黄瓜框架从2.4升级到4.0并遇到问题:

Start Test Suite [ 2019-02-14 13:15:40 -0800 ]
Selenium standalone isn't running. Starting standalone server in background.
Determining host operating system... darwin18.2.0
Determining host operating system... darwin18.2.0
cannot load such file -- cucumber/core/gherkin/tag_expression (LoadError)
SITE_TYPE: desktop  DEBUG_MODE: false  SELENIUM_ENV: local  SELENIUM BROWSER: firefox  RERUN_TEST: false
quitting browser
End Test Suite [ 2019-02-14 13:15:42 -0800 ] 

无论有没有标签,都无法启动任何测试,如果有人可以分享一些有关如何调试它的想法,将不胜感激?

1 个答案:

答案 0 :(得分:1)

// These are important and needed before anything else import 'zone.js/dist/zone-node'; import 'reflect-metadata'; import { enableProdMode } from '@angular/core'; import { ngExpressEngine } from '@nguniversal/express-engine'; import * as express from 'express'; import { join } from 'path'; const DIST_FOLDER = join(process.cwd(), 'dist'); // Faster server renders w/ Prod mode (dev mode never needed) enableProdMode(); const domino = require('domino'); const fs = require('fs'); const path = require('path'); const template = fs.readFileSync(join(DIST_FOLDER, 'browser', 'index.html')).toString(); const win = domino.createWindow(template); global['window'] = win; global['document'] = win.document; global['DOMTokenList'] = win.DOMTokenList; global['Node'] = win.Node; global['Text'] = win.Text; global['HTMLElement'] = win.HTMLElement; global['navigator'] = win.navigator; global['CSS'] = null; global['Event'] = win.Event; global['Event']['prototype'] = win.Event.prototype; Object.defineProperty(win.document.body.style, 'transform', { value: () => { return { enumerable: true, configurable: true }; }, }); // Express server const app = express(); const PORT = process.env.PORT || 4000; const { AppServerModuleNgFactory, LAZY_MODULE_MAP } = require('./dist/server/main'); const { provideModuleMap } = require('@nguniversal/module-map-ngfactory-loader'); app.engine('html', ngExpressEngine({ bootstrap: AppServerModuleNgFactory, providers: [ provideModuleMap(LAZY_MODULE_MAP) ] })); app.set('view engine', 'html'); app.set('views', join(DIST_FOLDER, 'browser')); // Server static files from /browser app.get('*.*', express.static(join(DIST_FOLDER, 'browser'))); // All regular routes use the Universal engine app.get('*', (req, res) => { res.render('index', { req }); }); // Start up the Node server app.listen(PORT, () => { console.log(`Node server listening on http://localhost:${PORT}`); }); 被移动到另一个宝石:cucumber-tag_expressions,如here所述。根据代码中引发此错误的位置,您可能需要更改引发错误的const path = require('path'); const webpack = require('webpack'); module.exports = { entry: { server: './server.ts' }, resolve: { extensions: ['.js', '.ts'] }, target: 'node', mode: 'none', // this makes sure we includes node_modules and other 3rd party libraries externals: [/(node_modules|main(\\|\/)..*(\\|\/).js)/], output: { path: path.join(__dirname, 'dist'), filename: '[name].js' }, module: { rules: [ { test: /\.ts$/, loader: 'ts-loader' }, { // Mark files inside `@angular/core` as using SystemJS style dynamic imports. // Removing this will cause deprecation warnings to appear. test: /(\\|\/)@angular(\\|\/)core(\\|\/).+\.js$/, parser: { system: true }, }, ] }, plugins: [ // Temporary Fix for issue: https://github.com/angular/angular/issues/11580 // for 'WARNING Critical dependency: the request of a dependency is an expression' new webpack.ContextReplacementPlugin( /(.+)?angular(\\|\/)core(.+)?/, path.join(__dirname, 'src'), // location of your src {} // a map of your routes ), new webpack.ContextReplacementPlugin( /(.+)?express(\\|\/)(.+)?/, path.join(__dirname, 'src'), {} ), new webpack.ProvidePlugin({ $: "jquery", jQuery: "jquery", "window.jQuery": "jquery" }) ] }; ,或者可能只需要安装gem。

我注意到的另一件事是Cucumber 4.0仍处于RC(发行候选版本)中,尚未稳定,因此您可能要恢复到最新的稳定版本,即今天的3.1.2,这可能会解决问题。