Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

typescript mocha describe is not a function

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:

    > [email protected] pretest /home/user/folder/project
    > tsc


    > [email protected] 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.

like image 372
User1 Avatar asked Dec 08 '17 14:12

User1


1 Answers

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"
like image 79
User1 Avatar answered Sep 30 '22 07:09

User1