Jasmine:Angular Typescript 项目中的“不完整:未找到规范”

问题描述 投票:0回答:9

出于某种我无法理解的原因,Karma 说 Jasmine 找不到我的任何测试规格。我使用 Angular 9、Typescript 和

ng test
来运行测试。我还运行
jasmine init
来创建 jasmine.json 配置文件。我已经尝试了几次配置更改,创建了一个虚拟测试 javascript 文件等,但我仍然收到相同的“未找到规格”消息。这真的很令人沮丧,我确信我只是忽略了这里明显的一些东西。

测试文件夹结构:

spec
    services
        address.service.spec.ts
        login.service.spec.ts
        ...
     support
         jasmine.json

jasmine.json:

{
  "spec_dir": "spec",
  "spec_files": [
  "**/*[sS]pec.js", // tried with "**/*[sS]pec.ts"
  "services/*[sS]pec.js" // tried with "services/*[sS]pec.ts"
  ],
  "helpers": [
  "helpers/**/*.js" // tried with "helpers/**/*.ts"
  ],
  "stopSpecOnExpectationFailure": false,
  "random": false
}

karma.conf.js :

// Karma configuration file, see link for more information
// https://karma-runner.github.io/1.0/config/configuration-file.html

module.exports = function(config) {
    config.set({
        basePath: '',
        frameworks: ['jasmine', '@angular-devkit/build-angular'],
        plugins: [
            require('karma-jasmine'),
            require('karma-chrome-launcher'),
            require('karma-jasmine-html-reporter'),
            require('karma-coverage-istanbul-reporter'),
            require('@angular-devkit/build-angular/plugins/karma'),
        ],
        client: {
            clearContext: false, // leave Jasmine Spec Runner output visible in browser
        },
        coverageIstanbulReporter: {
            dir: require('path').join(
                __dirname,
                './coverage/censored',
            ),
            reports: ['html', 'lcovonly', 'text-summary'],
            fixWebpackSourcePaths: true,
        },
        reporters: ['progress', 'kjhtml'],
        port: 9876,
        colors: true,
        logLevel: config.LOG_INFO,
        autoWatch: true,
        browsers: ['Chrome'],
        singleRun: false,
        restartOnFileChange: true,
    });
};
angular typescript testing jasmine karma-runner
9个回答
18
投票

我今天遇到了这个错误,对我来说,这是我的

.ts
文件中存在语法级错误,因此它们无法真正编译。

在上述情况下,我认为测试不应该开始(而是显示编译错误)。

但无论出于何种原因,测试都会以某种方式开始,并且

Jasmine
失败并显示“
No specs found
”日志。


4
投票

就我而言,当我运行

时,我在终端中看到了一些错误

NG测试

但是当我在浏览器中打开网络应用程序时,它显示未找到规格。

项目错误

这就是错误。修复上述错误后,它显示了所有规格以及执行测试用例的结果


1
投票

我遇到了类似的问题,显然是由于导入无效造成的。
这是具体的导入:

import 'rxjs/add/observable/throw'

我刚刚删除了导入,一切正常。

ng 测试似乎执行得很好,所以有点混乱。


0
投票

解决了。当我将 .spec 文件移至 /src 文件夹后,Jasmine 检测到它们没有任何问题。


0
投票

我遇到了同样的问题,但就我而言,我从 Angular 9 升级到 Angular 10 并且测试停止运行,我得到了很多:

src/app/xxxxx/basic-info/basic-info.component.spec.ts:391:9 - error TS2532: Object is possibly 'undefined'.

391 this.whatToDelete = ["mumbo", "jumbo"];

所以在“描述”中我将箭头函数更改为常规函数,因为箭头函数没有自己的“this”

*

与常规函数不同,箭头函数没有自己的 this 。 箭头函数内的 this 值始终保持不变 函数的生命周期,并且始终绑定到 this 的值 在最近的非箭头父函数中。

希望这可以帮助你们之一并节省您一些时间


0
投票

一旦我将 .spec 文件移动到 /spec 目录中,它就找到了测试。


0
投票

我在 VSCode 中更改代码时出现了此问题。我隐藏了更改以确认测试仍然可以使用原始版本运行。他们做到了。当我重新应用我的储藏室时,测试仍然有效。

看起来完全是随机的,但这也许会对遇到此问题的其他人有所帮助。


0
投票

我遇到了同样的问题,但就我而言,在编译“ ng test --watch --code-coverage --include=/data-builder.component.spec.ts”时 我已经通过了“ng test --watch --code-coverage --include=/data-builder.component.ts”

路径不匹配时也会出现此错误


0
投票

迁移后,我的问题最终出现在

test.ts
文件中。

看起来

zone.js
在某个时刻重新设计了它的文件夹/导出结构,并且我迁移时的 Angular cli 与该更改不同步。

// This file is required by karma.conf.js and loads recursively all the .spec and framework files

// import 'zone.js/dist/zone-testing'; <-- Does not work
import 'zone.js/testing'; // <-- Works

// ...
© www.soinside.com 2019 - 2024. All rights reserved.