小编use*_*412的帖子

Angular 11 单元测试代码覆盖率正在突破

在升级到 Angular 11 之前,我通过以下命令运行了代码覆盖率的单元测试:

ng test --project my-app --code-coverage true
Run Code Online (Sandbox Code Playgroud)

当我将我的项目升级到 Angular 11 时,我仍然能够进行我的代码覆盖率测试,但是我开始收到一条消息,说“'karma-coverage-istanbul-reporter' 的使用自版本 11 以来已被弃用”。它要求我安装 karma-coverage 并更新 karma.conf.js。所以我做了它所要求的。我通过以下命令安装了 karma-coverage 和 karma:

npm install karma karma-coverage --save-dev
Run Code Online (Sandbox Code Playgroud)

结果,我在 package.json 中的 devDependencies 下看到了 karma 条目:

ng test --project my-app --code-coverage true
Run Code Online (Sandbox Code Playgroud)

我更新了我的 karma.conf.js 文件。以下是存在的内容,除了我的评论外,一切都和原来一样:

npm install karma karma-coverage --save-dev
Run Code Online (Sandbox Code Playgroud)

进行此更新后,发生了两件事,我不知道为什么。

  1. 当我运行正常的代码覆盖率命令时,我收到以下错误:“服务器在端口 9876 上启动失败:错误:必须安装 karma-coverage 才能运行代码覆盖率。” 我确实安装了它,正如我的 package.json 所示,但由于某种原因,我的项目无法识别这一点。此外,如果我将 karma-coverage-istanbul-reporter require 方法添加回我的 conf.js 文件,coverage 工作正常,但我仍然收到该弃用消息。谁能向我解释为什么我可能会收到此错误?

  2. 当我在没有覆盖的情况下运行测试时,我现在收到多个以前从未收到过的警告,例如:“无法从文件扩展名确定文件类型,默认为 js。要使警告静音,请指定 C:/Angular/ 的有效类型配置文件中的 my-project/projects/my-app/src/app/app.component.spec.ts。” 我需要做什么来解决这个问题?

编辑:我找到了答案。在coverageReporter 对象中,您需要将fixWebpackSourcePaths 属性添加为true:

"karma": "^5.2.3",<br>
"karma-coverage": "^2.0.3"
Run Code Online (Sandbox Code Playgroud)

unit-testing karma-jasmine karma-coverage angular-cli angular11

17
推荐指数
1
解决办法
1万
查看次数

通过JQuery传递和返回ColdFusion结构

我有一个ColdFusion会话变量,它是一个数据结构.我的目标是执行一个jQuery调用,通过Ajax执行以下两种操作之一:

  1. 将ColdFusion结构发送到ColdFusion组件方法,使用新创建的字符串更新该结构的元素,然后返回相同的结构.

要么

  1. 执行ColdFusion组件方法,该方法创建一个新字符串,返回该字符串,并在Ajax调用后将该新字符串分配给同一ColdFusion会话结构的元素.

我认为这很容易,但我遇到了一些问题.有人知道我需要做什么吗?

ajax coldfusion jquery components data-structures

6
推荐指数
1
解决办法
5577
查看次数

Angular 将 TSLint 迁移到 ESLint Banana-In-Box 错误

我的 Angular 项目从 TSLint 迁移到 ESLint 时遇到了重大问题。我的工作方式是创建一个全新的项目(当前在 Angular 9 中),然后升级到 Angular 10.2。我遵循了@angular-eslint/schematic process中的指南,并且运行了 npx tslint-to-eslint-config。但是,当我尝试通过 Visual Studio Code 扩展运行 ESLint 时,当它尝试对我的 app.component.ts 文件进行 ESLint 时,出现以下错误:

Error while loading rule '@angular-eslint/template/banana-in-box': You have used a rule which requires '@angular-eslint/template-parser' to be used as the 'parser' in your ESLint config.
Run Code Online (Sandbox Code Playgroud)

以下是我的 .eslintrc.js 文件配置:

module.exports = {
"env": {
    "browser": true,
    "es6": true,
    "node": true
},
"extends": [
    "plugin:@typescript-eslint/recommended",
    "plugin:@typescript-eslint/recommended-requiring-type-checking"
],
"ignorePatterns": ["node_modules/**/*", "**/node_modules/**/*", "dist/**/*"],
"parser": "@typescript-eslint/parser",
"parserOptions": {
    "project": "tsconfig.json", …
Run Code Online (Sandbox Code Playgroud)

eslint tslint angular codelyzer typescript-eslint

6
推荐指数
1
解决办法
5431
查看次数

Angular FormArray 或 FormGroup - 带有额外数据

我有一个动态创建的表,它显示的数据如下:

<table>
  <tr *ngFor="let product of products">
    <td>{{product.name}}</td>
    <td>{{product.description}}</td>
    <td>{{product.value}}</td>
    <!-- BELOW IS WHERE A NEW VALUE WILL BE ENTERED -->
    <td><input type="text" value=""></td>
  </tr>
</table>
Run Code Online (Sandbox Code Playgroud)

我读到处理这个问题的适当方法是使用 FormsArray。但我也读到,使用 FormsArray 的正确方法是获取其控件数组:

<table>
  <tr *ngFor="let product of this.form.get('productCollection').controls; let i = index;"
     [formGroupName]="i">
    <td>{{product.name}}</td>
    <td>{{product.description}}</td>
    <td>{{product.value}}</td>
    <!-- BELOW IS WHERE A NEW VALUE WILL BE ENTERED -->
    <td><input type="text" formControlName="name"></td>
  </tr>
</table>
Run Code Online (Sandbox Code Playgroud)

问题是我无权访问此处的描述值。我还没有找到一种方法将其作为元数据传递给控件,​​以便我可以显示它。

那么问题是,对于这样的事情,哪种方法是正确的?是FormArray吗?它是一个 FormGroup 中的一组 FormControl 吗?或者每个表单控件都需要单独存在吗?我愿意接受有关如何开展这项工作的建议。

dynamic-forms angular angular-reactive-forms formarray formgroups

5
推荐指数
1
解决办法
1761
查看次数

$ .ajax调用ColdFusion组件输出文本不是HTML

如果已经回答,我会提前道歉.

我的目标是创建一个分页方案,该方案将变量发送到ColdFusion函数中的查询,该函数抓取X个元素并在我的网页上显示这些记录而不刷新它.因此,为了测试抓取HTML内容并将其显示到屏幕而不刷新的基本功能,我尝试对ColdFusion组件执行简单的AJAX调用,让它返回带有HTML内容的变量,并显示格式化的HTML在我的网页上的div标签内.这是基于我在网络上看到的前一个例子,它使用了cfajaxproxy,虽然这可能是我的问题,但我很惊讶它根本就没有做到它应该做的事情.

我有一个名为testGeneration.cfm的文件,这里是代码:

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <title>Untitled Document</title>

    <!-- call the jQuery library -->
    <script src="jquery.min.js" type="text/javascript"></script>
    <script type="text/javascript">

        $(document).ready(function() {
            $("#loadLink").click(function(e) {
                e.preventDefault();
                $.ajax({
                    type: "GET",
                    url: "generateInfo.cfc?method=createHTML",
                    dataType: "html",
                    success: function(message) {
                        $("#mydiv").html(message);
                    }
                });
            });
        });
    </script>
</head>

<body>
    <a href="" id="loadLink">Load Query</a>
    <!-- empty div to load dynamcically generated table into -->
    <div id="mydiv"></div>
</body>
Run Code Online (Sandbox Code Playgroud)

如您所见,它使用CreateHTML方法调用组件GenerateInfo.以下是generateInfo.cfc的代码:

<cfcomponent displayname="Generate HTML" output="false">

<cffunction name="createHTML" displayname="Create HTML" description="Creates HTML to output with jQuery." access="remote" …
Run Code Online (Sandbox Code Playgroud)

html ajax coldfusion jquery cfc

1
推荐指数
1
解决办法
4277
查看次数