如何使Karma在工作空间内运行特定的Angle 6组件库的测试

时间:2018-06-21 13:24:26

标签: angular unit-testing karma-runner

我有一个6号角工作区(称为迈阿密空间),并创建了一个名为“ vice-lib”的组件库。该目录树如下所示:

.
└── miami-space       <-- This is my workspace directory
    ├── e2e
    │   └── src
    ├── node_modules
    ...
    ├── projects      <-- Projects directory for created libraries
    │   └── vice-lib
    │       └── src
    │           └── lib
    └── src           <-- The source directory for the app
        ├── app
        ├── assets
        └── environments

(我用ng新库Vice-lib --ext = vlib创建了库)

如果我进入根目录(miami-space)并使用运行单元测试

  

npm运行测试

Karma在浏览器中运行测试,但是由于存在针对应用程序的测试和针对库的测试,因此karma分两个阶段运行测试。

第一阶段运行应用程序的测试,您会在控制台中看到以下内容:

λ ~/dev/tasks/t-122/cat/miami-space/ npm run test

> miami-fake-app@0.0.0 test /Users/Plastikfan/dev/tasks/t-122/cat/miami-space
> ng test

 10% building modules 1/1 modules 0 active(node:41963) DeprecationWarning: Tapable.plugin is deprecated. Use new API on `.hooks` instead
21 06 2018 13:47:36.106:WARN [karma]: No captured browser, open http://localhost:9876/
21 06 2018 13:47:36.111:INFO [karma]: Karma v1.7.1 server started at http://0.0.0.0:9876/
21 06 2018 13:47:36.111:INFO [launcher]: Launching browser Chrome with unlimited concurrency
21 06 2018 13:47:36.116:INFO [launcher]: Starting browser Chrome
21 06 2018 13:47:39.894:WARN [karma]: No captured browser, open http://localhost:9876/    
21 06 2018 13:47:40.006:INFO [Chrome 67.0.3396 (Mac OS X 10.13.4)]: Connected on socket _5z2mq2NuMiHHahdAAAA with id 8795036
Chrome 67.0.3396 (Mac OS X 10.13.4): Executed 3 of 3 SUCCESS (0.154 secs / 0.138 secs)

...,并且该应用的测试结果会显示在浏览器中

如果您按<< em> CTRL >-C,则Karma会终止浏览器,然后仅运行库的测试(请注意,当我按CTRL-C ):

^C  0% compiling21 06 2018 13:50:21.034:WARN [karma]: No captured browser, open http://localhost:9876/
21 06 2018 13:50:21.035:INFO [karma]: Karma v1.7.1 server started at http://0.0.0.0:9876/
21 06 2018 13:50:21.035:INFO [launcher]: Launching browser Chrome with unlimited concurrency
21 06 2018 13:50:21.044:INFO [launcher]: Starting browser Chrome
21 06 2018 13:50:24.453:WARN [karma]: No captured browser, open http://localhost:9876/  
21 06 2018 13:50:24.544:INFO [Chrome 67.0.3396 (Mac OS X 10.13.4)]: Connected on socket FelqTteskkryAtnYAAAB with id 63644171
Chrome 67.0.3396 (Mac OS X 10.13.4): Executed 5 of 5 SUCCESS (0.112 secs / 0.093 secs)

所以我真的不了解Karma在这里如何运行,假定这是预期的行为。

是否仅在运行应用程序测试后才允许对组件库运行测试?如果我的应用程序中有很多测试,但我只想运行库测试该怎么办?

如果我“ cd”到Vice-lib目录并尝试使用npm run test运行测试,则由于package.json是一个不包含脚本部分的缩减配置,因此npm可以理解为失败: >

  

回显“错误:未指定测试”

因此,我进一步阅读了业力文档,并看到了“ basePath”(默认设置为空字符串)。描述为:

  

将用于解析文件中定义的所有相对路径并排除的根路径位置。如果basePath配置是   相对路径,则它将解析为   配置文件。

我以为我可以将其更新为指向库的根(希望在命令行中指定该选项,因此我可以编写多个脚本条目,请参见下文)

  

./ src / projects / vice-lib

但这似乎对Karma的行为没有影响,并且再次运行两组测试,并需要CTRL-C才能进入运行库测试的第二阶段。这似乎是一个非常繁琐的工作流程,我希望有一个解决方法,所以我可以立即运行库测试。

比方说,我在工作空间中插入了另一个库,因此现在有2个组件库和一个应用程序。这是否意味着我必须先运行应用程序测试,然后运行Vice-lib测试,然后运行新的库测试?我认为您可以看到我的处理方法,但这似乎并不正确,除非我做错了(很可能!)。

我有一个默认的test.ts文件,该文件与包含行(用于查找要运行的测试用例)的默认文件相同:

// Then we find all the tests.
const context = require.context('./', true, /\.spec\.ts$/);

但是我不确定如何在每个库级别进行更改。

我希望我可以在package.json:脚本中定义多个条目,例如:

"test:app": "ng test",
"test:vice": "ng test --<some option to refer to .projects/vice-lib>"

以便我可以直接为所需的库运行测试。

那么Karma在这里如何运行,难道它不设计为可与工作空间中的多个项目一起使用吗?

更新:我也尝试在副lib-lib测试治具之一上使用 fdescribe ,但这除了在控制台上发出警告外没有其他作用:

  

Chrome 67.0.3396(Mac OS X 10.13.4)错误:'DEPRECATION:适合并且   fdescribe将导致您的套件在以下位置报告“未完成”状态   茉莉花3.0'

1 个答案:

答案 0 :(得分:5)

如果只需要运行该库的测试,则可以使用ng test library-name,就像使用build命令生成dist文件一样。说明here