我创建了一个项目,我想用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的强大设置以便我可以测试和观看的任何建议吗?
答案 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 **/*