2

I have a problem with run unit test for my stack: - node - ts-node - express.js - sequelize - mysql - karma

When I run Karma I get a lot of errors like this one:

04 05 2018 20:49:57.255:ERROR [karma]: Error: Unable to resolve module [sqlite3] from [/home/userName/Projects/commercial/projectName/projectName-cpf/node_modules/sequelize/lib/dialects/sqlite/connection-manager.js]
{
  "basedir": "/home/userName/Projects/commercial/projectName/projectName-cpf",
  "extensions": [
    ".js",
    ".json",
    ".ts",
    ".tsx"
  ],
  "moduleDirectory": [
    "node_modules"
  ],
  "modules": {
    "assert": "/home/userName/Projects/commercial/projectName/projectName-cpf/node_modules/assert/assert.js",
    "buffer": "/home/userName/Projects/commercial/projectName/projectName-cpf/node_modules/buffer/index.js",
    "child_process": "/home/userName/Projects/commercial/projectName/projectName-cpf/node_modules/karma-typescript/dist/bundler/resolve/empty.js",
    "cluster": "/home/userName/Projects/commercial/projectName/projectName-cpf/node_modules/karma-typescript/dist/bundler/resolve/empty.js",
    "console": "/home/userName/Projects/commercial/projectName/projectName-cpf/node_modules/console-browserify/index.js",
    "constants": "/home/userName/Projects/commercial/projectName/projectName-cpf/node_modules/constants-browserify/constants.json",
    "crypto": "/home/userName/Projects/commercial/projectName/projectName-cpf/node_modules/crypto-browserify/index.js",
    "dgram": "/home/userName/Projects/commercial/projectName/projectName-cpf/node_modules/karma-typescript/dist/bundler/resolve/empty.js",
    "dns": "/home/userName/Projects/commercial/projectName/projectName-cpf/node_modules/karma-typescript/dist/bundler/resolve/empty.js",
    "domain": "/home/userName/Projects/commercial/projectName/projectName-cpf/node_modules/domain-browser/source/index.js",
    "events": "/home/userName/Projects/commercial/projectName/projectName-cpf/node_modules/events/events.js",
    "fs": "/home/userName/Projects/commercial/projectName/projectName-cpf/node_modules/karma-typescript/dist/bundler/resolve/empty.js",
    "http": "/home/userName/Projects/commercial/projectName/projectName-cpf/node_modules/stream-http/index.js",
    "https": "/home/userName/Projects/commercial/projectName/projectName-cpf/node_modules/https-browserify/index.js",
    "module": "/home/userName/Projects/commercial/projectName/projectName-cpf/node_modules/karma-typescript/dist/bundler/resolve/empty.js",
    "net": "/home/userName/Projects/commercial/projectName/projectName-cpf/node_modules/karma-typescript/dist/bundler/resolve/empty.js",
    "os": "/home/userName/Projects/commercial/projectName/projectName-cpf/node_modules/os-browserify/browser.js",
    "path": "/home/userName/Projects/commercial/projectName/projectName-cpf/node_modules/path-browserify/index.js",
    "punycode": "/home/userName/Projects/commercial/projectName/projectName-cpf/node_modules/punycode/punycode.js",
    "querystring": "/home/userName/Projects/commercial/projectName/projectName-cpf/node_modules/querystring-es3/index.js",
    "readline": "/home/userName/Projects/commercial/projectName/projectName-cpf/node_modules/karma-typescript/dist/bundler/resolve/empty.js",
    "repl": "/home/userName/Projects/commercial/projectName/projectName-cpf/node_modules/karma-typescript/dist/bundler/resolve/empty.js",
    "stream": "/home/userName/Projects/commercial/projectName/projectName-cpf/node_modules/stream-browserify/index.js",
    "_stream_duplex": "/home/userName/Projects/commercial/projectName/projectName-cpf/node_modules/readable-stream/duplex.js",
    "_stream_passthrough": "/home/userName/Projects/commercial/projectName/projectName-cpf/node_modules/readable-stream/passthrough.js",
    "_stream_readable": "/home/userName/Projects/commercial/projectName/projectName-cpf/node_modules/readable-stream/readable.js",
    "_stream_transform": "/home/userName/Projects/commercial/projectName/projectName-cpf/node_modules/readable-stream/transform.js",
    "_stream_writable": "/home/userName/Projects/commercial/projectName/projectName-cpf/node_modules/readable-stream/writable.js",
    "string_decoder": "/home/userName/Projects/commercial/projectName/projectName-cpf/node_modules/string_decoder/lib/string_decoder.js",
    "sys": "/home/userName/Projects/commercial/projectName/projectName-cpf/node_modules/util/util.js",
    "timers": "/home/userName/Projects/commercial/projectName/projectName-cpf/node_modules/timers-browserify/main.js",
    "tls": "/home/userName/Projects/commercial/projectName/projectName-cpf/node_modules/karma-typescript/dist/bundler/resolve/empty.js",
    "tty": "/home/userName/Projects/commercial/projectName/projectName-cpf/node_modules/tty-browserify/index.js",
    "url": "/home/userName/Projects/commercial/projectName/projectName-cpf/node_modules/url/url.js",
    "util": "/home/userName/Projects/commercial/projectName/projectName-cpf/node_modules/util/util.js",
    "vm": "/home/userName/Projects/commercial/projectName/projectName-cpf/node_modules/vm-browserify/index.js",
    "zlib": "/home/userName/Projects/commercial/projectName/projectName-cpf/node_modules/browserify-zlib/lib/index.js",
    "_process": "/home/userName/Projects/commercial/projectName/projectName-cpf/node_modules/process/browser.js"
  },
  "filename": "",
  "paths": []
}
Error: Cannot find module 'sqlite3' from '/home/userName/Projects/commercial/projectName/projectName-cpf/node_modules/sequelize/lib/dialects/sqlite'
    at /home/userName/Projects/commercial/projectName/projectName-cpf/node_modules/karma-typescript/src/bundler/resolve/resolver.ts:194:27
    at /home/userName/Projects/commercial/projectName/projectName-cpf/node_modules/browser-resolve/index.js:265:24
    at /home/userName/Projects/commercial/projectName/projectName-cpf/node_modules/browser-resolve/node_modules/resolve/lib/async.js:46:14
    at process (/home/userName/Projects/commercial/projectName/projectName-cpf/node_modules/browser-resolve/node_modules/resolve/lib/async.js:173:43)
    at ondir (/home/userName/Projects/commercial/projectName/projectName-cpf/node_modules/browser-resolve/node_modules/resolve/lib/async.js:188:17)
    at load (/home/userName/Projects/commercial/projectName/projectName-cpf/node_modules/browser-resolve/node_modules/resolve/lib/async.js:69:43)
    at onex (/home/userName/Projects/commercial/projectName/projectName-cpf/node_modules/browser-resolve/node_modules/resolve/lib/async.js:92:31)
    at /home/userName/Projects/commercial/projectName/projectName-cpf/node_modules/browser-resolve/node_modules/resolve/lib/async.js:22:47
    at FSReqWrap.oncomplete (fs.js:152:21)

Above error is connected with sqlite3, but I has also [pg] module and [tedious]

I saw that I should install one dependencies for DB system what I use in my development, so I use npm install mysql2 but I can't start any Karma task.

Any idea where I should search? I doesn't see this problem on any github & stack questions so I think that this is in my config.

Below I post my karma.conf.js, tsconfig.json & package.json

karma.conf.js

module.exports = function (config) {
    config.set({
        frameworks: ["karma-typescript"],
        files: [
            "src/**/*.spec.ts",
            "src/**/*.ts"
        ],
        plugins: [
            require('karma-typescript'),
            require('karma-typescript-preprocessor'),
            require('karma-phantomjs-launcher'),
            require('karma-chrome-launcher'),
        ],
        preprocessors: {
            '**/*.ts': ['karma-typescript']
        },
        karmaTypescriptConfig: {
            tsconfig: "./tsconfig.json"
        },

        reporters: ["progress", "karma-typescript"],
        browsers: [
            // "PhantomJS"
            "Chrome"
        ],
        singleRun: false
    });
};

tsconfig.json:

{
  "compileOnSave": true,
  "compilerOptions": {
    "removeComments": true,
    "noImplicitAny": true,
    "module": "commonjs",
    "target": "es6",
    "sourceMap": true,
    "outDir": "dist",
    "watch": true,
    "skipLibCheck": true,
    "experimentalDecorators": true,
    "emitDecoratorMetadata": true
  },
  "exclude": [
    "./node_modules/*"
  ]
}

And my dependencies from package.json:

"dependencies": {
    "axios": "^0.18.0",
    "errorhandler": "^1.5.0",
    "express": "^4.16.3",
    "http-signature": "^1.2.0",
    "mysql2": "^1.5.3",
    "nconf": "^0.10.0",
    "nodemon": "^1.17.3",
    "request": "^2.85.0",
    "sequelize": "^4.37.6"
  },
  "devDependencies": {
    "@types/chai": "^4.1.3",
    "@types/errorhandler": "0.0.32",
    "@types/express": "^4.11.1",
    "@types/mocha": "^5.2.0",
    "@types/nconf": "0.0.37",
    "@types/sinon": "^4.3.1",
    "chai": "^4.1.2",
    "gulp": "^4.0.0",
    "gulp-bump": "^3.1.1",
    "gulp-rimraf": "^0.2.2",
    "gulp-touch-fd": "^2.0.0",
    "gulp-typescript": "^4.0.2",
    "karma": "^2.0.2",
    "karma-chai": "^0.1.0",
    "karma-phantomjs-launcher": "^1.0.4",
    "karma-chrome-launcher": "^2.2.0",
    "karma-mocha": "^1.3.0",
    "karma-sinon": "^1.0.5",
    "karma-typescript": "^3.0.12",
    "karma-typescript-preprocessor": "^0.3.1",
    "mocha": "^5.1.1",
    "reflect-metadata": "^0.1.12",
    "sequelize-typescript": "^0.6.4",
    "sinon": "^5.0.3",
    "ts-node": "^6.0.1",
    "typedoc": "^0.11.1",
    "typescript": "^2.8.3"
  }
4

1 回答 1

0

虽然这很旧,但我也遇到了同样的问题。对我来说,问题是业力——它不是为了测试 node.js。Karma 通常在 chrome-headless 浏览器中运行 Javascript 代码,这是一个完全不同的环境。

解决方案是删除所有业力依赖项,然后使用 mocha 运行测试

"scripts": {
    "test": "mocha './src/**/*.test.js'"
  },

https://blog.logrocket.com/unit-testing-node-js-applications-using-mocha-chai-and-sinon/

于 2020-06-04T17:27:39.047 回答