typescript mocha describe is not a function

2019-06-27 11:25发布

The issue I have is that mocha-typescript keeps throwing an error that describe is not defined.

    TypeError: mocha_typescript_1.describe is not a function
    at DatabaseTest.WrongPath (test/database_test.ts:21:9)
    at Context.<anonymous> (node_modules/mocha-typescript/index.ts:218:22)

My tsconfig.json

    {
      "compilerOptions": {
        "target": "es6",
        "module": "commonjs",
        "outDir": "dist",
        "sourceMap": true,
        "lib": ["es6"],
        "experimentalDecorators": true,
        "emitDecoratorMetadata": true,
        "noUnusedLocals": true,
        "noUnusedParameters": true,
        "typeRoots": [
          "./node_modules/@types"
        ],
        "types": [
          "node", "mocha", "chai"
        ]
      },
      "include": [
        "src/**/*.ts",
        "test/**/*.ts"
      ],
      "exclude": [
        "node_modules"
      ]
    }

My package.json

    {
      //omitted
      "main": "App.js",
      "scripts": {
        "pretest": "tsc",
        "test": "nyc mocha --require ts-node/register test/**/*_test.ts ",
        "watch": "mocha-typescript-watch",
        "prepare": "tsc"
      },

      // ommitted

      "dependencies": {
        "@types/chai": "^4.0.6",
        "@types/jsesc": "^0.4.29",
        "@types/mocha": "^2.2.44",
        "@types/node": "^8.0.53",
        "@types/sqlite3": "^3.1.1",
        "chai": "^4.1.2",
        "express": "^4.16.2",
        "express-longpoll": "0.0.4",
        "jsesc": "^2.5.1",
        "mocha": "^4.0.1",
        "mocha-typescript": "^1.1.12",
        "nyc": "^11.3.0",
        "reflect-metadata": "^0.1.10",
        "sequelize": "^4.26.0",
        "sequelize-typescript": "^0.6.1",
        "source-map-support": "^0.5.0",
        "sqlite3": "^3.1.13",
        "ts-events": "^3.2.0",
        "ts-node": "^3.3.0",
        "typescript": "^2.6.2",
        "typings": "^2.1.1"
      }
    }

database_test.ts:

    //Unit testing script for Database.ts
    /// <reference path="../node_modules/mocha-typescript/globals.d.ts" />
    //// <reference path="../node_modules/@types/mocha/index.d.ts" />

    import { suite, test, describe, slow, timeout  } from "mocha-typescript"
    import { assert } from "chai";
    import 'mocha'

    @suite(slow(1000), timeout(3000))
    export class SampleTest {

        @test testFunc(){
            describe("Sample function", ()=>{
                it("Should succeed without any problems", (done) => {
                    assert.isTrue(true);
                    done();
                })
            });
        }
    }

Full log:

    > project@1.0.0 pretest /home/user/folder/project
    > tsc


    > project@1.0.0 test /home/user/folder/project
    > nyc mocha --require ts-node/register test/**/*.ts



      SampleTest
        1) testFunc            

      0 passing (13ms)
      1 failing

      1) SampleTest
           testFunc:
         TypeError: mocha_typescript_1.describe is not a function
          at DatabaseTest.WrongPath (test/database_test.ts:21:9)
          at Context.<anonymous> (node_modules/mocha-typescript/index.ts:218:22)


    ----------|----------|----------|----------|----------|----------------|
    File      |  % Stmts | % Branch |  % Funcs |  % Lines |Uncovered Lines |
    ----------|----------|----------|----------|----------|----------------|
    All files |  Unknown |  Unknown |  Unknown |  Unknown |                |
    ----------|----------|----------|----------|----------|----------------|
    npm ERR! Test failed.  See above for more details.

As you can see I've tried multiple things such as settings typeRoots and types in tsconfig.json, import mocha and two different type definiton files. None of them worked and I'm tangled up in all the possible combinations.

I've been trying to get typescript-mocha running for a while now and sometimes it works, sometimes it doesn't. A clear explanation I don't have, but I'd certainly like one.

1条回答
聊天终结者
2楼-- · 2019-06-27 11:33

Turns out the error is given because of a double keyword declaration. Apparently import 'mocha' is enough to declare the describe keyword.

I simply had to adjust the import line from

import { suite, test, describe, slow, timeout  } from "mocha-typescript"

to

import { suite, test, slow, timeout  } from "mocha-typescript"
查看更多
登录 后发表回答