结合摩卡,打字稿(和观看)

时间:2015-10-07 15:17:31

标签: typescript mocha

我创建了一个项目,我想用mocha来测试我的Typescript代码。如果我这样做:

mocha ts/test --compilers ts:typescript-require

在我做出更改后,它会失败并显示如下消息:

error TS2307: Cannot find module 'mocha'.

这很奇怪,因为如果我只是运行tsc一切都很好(我有我所有的类型定义,我使用tsconfig.json文件)。我还为typescript-require安装了mocha

但是每次我在那之后运行命令,它都有效吗?!?但是,如果我将mocha置于监听模式:

mocha -w ts/test --compilers ts:typescript-require

然后它第一次通过但在此之后失败。啊!有关如何获得涉及mocha和Typescript的强大设置以便我可以测试和观看的任何建议吗?

6 个答案:

答案 0 :(得分:8)

在遇到类似的用例(https://github.com/TypeStrong/ts-node)之后,我写了ts-node。我需要使用不同的测试运行器运行测试,并且编译到不同的目录不会削减它,因为我也喜欢内联测试夹具。它已经扩展为TypeScript的功能完整节点运行时(包括具有很少的.type命令功能的CLI)。在README中有一个用Mocha执行它的例子。

现在它都在内存中,但最终它将通过额外的标志进行扩展,以使其适合生产使用(例如,没有运行时开销,只是编译启动)。让我知道它是怎么回事!

答案 1 :(得分:8)

此命令监视typescript测试更改并触发它们(应安装ts节点):

@Column(name = "isDeleted", columnDefinition = "boolean default true", nullable = false)
private boolean isDeleted = true;

答案 2 :(得分:0)

在Mocha 7中,只有定义了--watch--watch-files时,--extension标志才起作用。因此,您可以选择以下任何配置:

"scripts": {
    "watch": "mocha -r ts-node/register test/*Test.ts  --watch --extensions ts"
}

"scripts": {
    "watch": "mocha -r ts-node/register test/*Test.ts  --watch --watch-files test"
}

来自Mocha官方文档:

-watch,-w重新运行文件更改测试。

-watch-files和--watch-ignore选项可用于控制 监视哪些文件进行更改。

可以通过输入ⓡ⏎手动重新运行测试(与 nodemon)。

-v7.0.0中的新监视文件

设置--watch时要监视的路径或全局列表。如果一个文件 匹配给定的glob更改,或者添加或删除了摩卡 重新运行所有测试。

如果路径是目录,则所有文件和子目录都将是 观看。

默认情况下,当前目录中的所有文件中 由--extension提供的扩展名,未包含在 监视node_modules或.git文件夹。

可以多次给出该选项。该选项接受 以逗号分隔的列表:--watch-files a,b等效于--watch-files a --watch文件b

答案 3 :(得分:0)

我创建了一个内容为.mocharc.json的

{
  "extension": ["ts"],
  "spec": "test/**/*.ts",
  "require": "ts-node/register"
}

现在我可以单次运行或以监视模式运行摩卡:

$ npx mocha
or
$ npx mocha --watch

我当然可以将它作为脚本添加到package.json中。

答案 4 :(得分:0)

-扩展标志现在在 Mocha 8 上不再起作用。

使用-监视文件

function parseXMLtoArray($xml){
$x = simplexml_load_string($xml);
$result = [];

function parse($xml, &$res){
    $res['name'] = $xml->getName();
    $res['value'] = $xml->__toString();
    foreach ($xml->attributes() as $k => $v){
        $res['attr'][$k] = $v->__toString();
    }

    foreach($xml->children() as $child){
        parse($child, $res['children'][]);
    }
}

parse($x, $result);

return $result;

}

$resArray = parseXMLtoArray($rawXml);

print_r($resArray);

答案 5 :(得分:0)

对我来说,我必须添加一个前缀trackById(item: {id: string}) { return item.id; }

**/

对于多个特定的文件夹/文件:

mocha -r ts-node/register "test/**/*.ts" --watch --watch-files **/*