小编min*_*rse的帖子

编写使用supertest的测试时访问req.session对象

我刚刚开始在我的快速应用程序中使用中间件supertestnock为其编写单元测试。

首先检查我的路由器设置处理的所有请求是否存在会话属性(我正在使用Express-Session)。

app.use('/api', helpers.hasAccessToken, require('./routes.js'));
Run Code Online (Sandbox Code Playgroud)

助手只是这样做:

module.exports.hasAccessToken = function(req, res, next) {
  if(req.session.accessToken){
    next();
  } else {
    res.status(401).send('LOGIN_SESSION_ENDED');
  }
};
Run Code Online (Sandbox Code Playgroud)

在我的测试规范中,我有:

var app = require('./index.js'),
  request = require('supertest')(app),
  expect = require('chai').expect,
  nock = require('nock');


    describe('GET requests', function(){
      beforeEach(function(){
        nock('https://somedomain:port')
          .get('/someendpoint')
          .reply(200, {foo:'bar'});
      });
      it('should return a 200 HTTP status code', function(done){
        request
          .get('/api/someendpoint')
          .end(function(err, res){
            expect(res.status).to.equal(200);
            done();
          });
      });
    });
Run Code Online (Sandbox Code Playgroud)

相反,将返回状态为401的错误,我知道req.session.accessToken这取决于运行测试之前未设置的属性。

那么,如何才能使该req对象对会话对象执行我喜欢的操作?

谢谢

node.js express supertest

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

当手动构建已经获得更改时,防止分支索引触发构建

我刚刚设置了一个基本的multibranch管道构建作业,并且有一个带有jenkinsfile的功能分支,我正在尝试这个功能.

我将工作配置为每隔5分钟轮询scm并在必要时触发构建.

我有时发现然而,当我手动启动建立我的分支我已经推后了一个调整我的Jenkinsfile为例(因为我不想等待下一个SCM轮询间隔),分支重新索引活动仍然可以触发另一个构建执行.

请参阅下面的我是什么意思的形象,所以在这里建造7是一个我拉开序幕手动上詹金斯,所以它拿起我的承诺,但随后的分支索引拉开序幕构建8但还没有为分支没有新的变化.

在此输入图像描述

有没有办法防止这种情况发生?除了我耐心等待5分钟当然!

谢谢

jenkins jenkins-pipeline

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

在业力测试运行期间从编译中排除文件

我正在使用带有Karma的angular-cli,我需要在运行单元测试时排除特定文件的编译.

有问题的文件在下面的错误中被引用,由于模块不存在而无法编译它所依赖的文件.

在此输入图像描述

该文件由模块将出现的其他项目使用,因此编译正常,它只是在这个特定项目中它不需要编译但仍需要导出.

我的目录结构如下:

index.ts
    - /src
    - /testing
Run Code Online (Sandbox Code Playgroud)

在我的index.ts文件中,我有一个导出:

export * from './src/core';
Run Code Online (Sandbox Code Playgroud)

我的testing文件夹下的TS源文件被编译器拾取,我不确定为什么因为我没有在我的src文件夹下的文件或其他任何地方导入该文件夹下的任何文件.

我想阻止编译器完全拿起我的测试文件夹,但我不能让它忽略它.

我正在使用angular-cli,在我的.angular-cli.json文件中我有这些行:

"tsconfig": "tsconfig.json",
"testTsconfig": "tsconfig.spec.json"
Run Code Online (Sandbox Code Playgroud)

这两个文件都位于我的src文件夹下,我尝试将一些排除模式添加到我的tsconfig.spec.json中,如下所示:

"exclude": [
        "../testing",
        "testing"
    ]
Run Code Online (Sandbox Code Playgroud)

但这没有任何区别.

然后我想知道业力是否肯定使用我的tsconfig.spec.json文件,所以我添加了以下内容:

 karmaTypescriptConfig : {
        tsconfig: '.src/tsconfig.spec.json',
    }
Run Code Online (Sandbox Code Playgroud)

但同样,仍然没有区别,我的测试文件夹在准备运行我的测试时被编译器拾取.

我不确定还有什么可以尝试,我已经将我的TypeScript(3.1.6)和Karma(3.1.1)版本更新到最新版本.

有没有人对这里可能发生的事情有任何想法?

谢谢

typescript karma-runner angular

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

如何在Typescript中导出类实例

我正在编写一个TS库,并想导出一个类的实例,所以我打算在消费应用程序中将其用作单例。

现在,我具有以下结构:

索引

export { Foo } from './my-class';
Run Code Online (Sandbox Code Playgroud)

foo.ts

export class Foo {
  functionA() {}
}
Run Code Online (Sandbox Code Playgroud)

然后,我使用webpack和babel将其构建为UMD格式,并且在另一个应用程序(Angular)中,我能够在我的类中导入,实例化并相应地使用它。

import { Foo } from 'foo';

private foo = new Foo();

const x = foo.functionA();
Run Code Online (Sandbox Code Playgroud)

有没有一种方法可以返回我的类的实例化实例,或者我是否正在以错误的方式考虑呢?

因此,不必这样做new Foo(),导入的Foo实际上已经是一个实例了吗?

谢谢

我应该提到的UPDATE,我正在导出接口之类的其他内容,因此我认为默认类导出不是正确的正确方法吗?-看这里

typescript umd angular

6
推荐指数
3
解决办法
4573
查看次数

高图-yAxis对数刻度和allowDecimals设置为false似乎没有任何作用

我想防止在已配置的面积图的y轴上显示十进制值。

当我的图表最初显示所有系列显示时,我看到:

在此处输入图片说明

But after filtering out some of the series to show, I see the y axis start showing decimal values like so:

在此处输入图片说明

My yAxis config is as follows:

yAxis: {
            gridLineColor: 'transparent',
            allowDecimals: false,
            type: 'logarithmic',
            minorTickInterval: 1,
            lineWidth: 0,
            gridLineWidth: 0,
            minorGridLineWidth: 0
        },
Run Code Online (Sandbox Code Playgroud)

I wondered if this had something to do with being a logarithmic scale, but when I comment out the type option to revert to using a default scale, it makes no difference, I observe …

highcharts highcharts-ng angular2-highcharts

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

git stash apply @stash {x}不适合我

我正在尝试使用以下方法应用特定的存储:

git stash apply stash@{2}
Run Code Online (Sandbox Code Playgroud)

但最终出现了这个错误:

致命的:模糊的论点'stash @':未知的修订或路径不在工作树中.

我有很多藏匿的条目,如果我做一个git存储列表超过20

我不确定这个错误试图告诉我什么,有人可以进一步建议吗?谢谢

git

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

Jenkins 与本地环境的纽约报告输出不同

当我尝试生成 Jenkins 管道作业的综合覆盖率报告时,发生了一些奇怪的事情。

我有一个 Nx 支持的 Angular monorepo,并且正在生成其中包含的所有库和项目的覆盖率报告。

我已将以下脚本放在一起来运行测试,然后用于nyc合并和报告操作。

const { execSync } = require('child_process');
const packageJSON = require("../package.json");

const EXCLUDE_UNIT_TEST = packageJSON.buildData.excludeUnitTest;
 
const run = (commands) => {
  commands.forEach((command) => execSync(command, { stdio: 'inherit' }));
};
 
run([
  `rm -rf coverage`,
  `npx nx run-many --target=test --all --maxWorkers=4 --exclude=${EXCLUDE_UNIT_TEST} --coverage=true`,
  `npx copyfiles -f 'coverage/**/*coverage.json' coverage/project-parts`,
  `npx nyc merge coverage/project-parts coverage/nyc/combined.json`,
  `npx nyc report --reporter html-spa --reporter lcov -t coverage/nyc --report-dir coverage/combined`
]);
Run Code Online (Sandbox Code Playgroud)

这在本地对我来说效果很好,我看到我的所有库/项目都有一个 HTML 报告(lcov 格式和 html-spa 报告)。

但是,当在 …

jenkins istanbul jenkins-pipeline nyc nrwl-nx

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

清除ng-model-options上的debounce

我在模型选项中配置了去抖动输入,如下所示:

<input type="text"
       ng-model="searchTerm" 
       ng-keypress="$event.which===13 && search(searchTerm)" 
       ng-model-options="{debounce: 1000}">
Run Code Online (Sandbox Code Playgroud)

然后,我为模型值设置了一个手表:

$scope.$watch('searchTerm', function (term) {
    if (!term || term.length === 0) {
      $scope.clearSearch();
    }
    if (term.length > 3) {
      $scope.search(term);
    }
});
Run Code Online (Sandbox Code Playgroud)

从输入声明中可以看出,如果按下回车键,我已经配置了一个ng-keypress事件来调用我的搜索功能.

有没有办法可以清除去抖动,所以[enter]键按键会清除debounce,允许searchTerm立即更新?

谢谢

angularjs

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

express-session:滚动会话过期配置

所以我在 mongo 商店中使用 express-session,如下所示:

app.use(session({
  secret: 'some secret here',
  saveUninitialized: false,
  resave: false,
  store: new MongoStore({
    url: 'http://someurlhere'
  })
}));
Run Code Online (Sandbox Code Playgroud)

我有一些登录中间件,在成功登录后,我想设置会话 cookie 到期时间。

所以我现在正在使用 10 秒的到期时间进行测试

req.session.cookie.expires = new Date(Date.now() + 10000);
Run Code Online (Sandbox Code Playgroud)

我希望为每个后续请求重置会话到期时间。目前,经过 10 秒后,无论我在登录后发出多少请求,会话都会过期。

我觉得我在这里误解了一些东西!

编辑

好的,所以我错过了rolling文档中的配置选项,但即使我在会话配置选项中将其设置为 true,也会发生相同的行为:

app.use(session({
  secret: 'some secret here',
  saveUninitialized: false,
  resave: false,
  store: new MongoStore({
    url: 'http://someurlhere'
  }),
    rolling: true,
    cookie: {
        maxAge: 10000
    }
}));
Run Code Online (Sandbox Code Playgroud)

我现在正在控制台记录我的路由中 cookie maxAge 的值,并看到它随着登录后的每个后续请求而减少,它永远不会重置回 10000。

我究竟做错了什么?

解决了

好的,所以我遇到了关于这个问题的评论

我更改resave为 true,现在按预期工作。

node.js express express-session

5
推荐指数
0
解决办法
1485
查看次数

Jest - Angular 9 - 类构造函数 SomeComponentClass 无法在没有“new”的情况下调用

我正在将我们的业力测试迁移到旧的 Angular 9 应用程序中的 Jest,并且面临一些测试失败的问题,并出现以下类型的异常:

类型错误:类构造函数 SomeComponentClass 无法在没有“new”的情况下调用

我遵循 Jest 设置指南并参考了其他一些独立指南,我的设置如下:

笑话配置.js

module.exports = {
    preset: "jest-preset-angular",
    setupFilesAfterEnv: ['<rootDir>/src/test-setup.ts'],
    globals: {
      'ts-jest': {
        tsconfig: '<rootDir>/src/tsconfig.spec.json',
        stringifyContentPathRegex: '\\.(html|svg)$',
      },
    },
    coverageDirectory: 'coverage',
    coverageReporters: ["html", "text-summary", "json-summary", "cobertura"],
    transform: {
        '^.+\\.(ts|js|html)$': 'jest-preset-angular',
    },
    snapshotSerializers: [
      'jest-preset-angular/build/serializers/no-ng-attributes',
      'jest-preset-angular/build/serializers/ng-snapshot',
      'jest-preset-angular/build/serializers/html-comment',
    ],
    testEnvironment: "jsdom",
    transformIgnorePatterns: [
        "node_modules/(?!@o3|@al|ui-metadata)"
    ],
    testPathIgnorePatterns: [
        "<rootDir>/node_modules/",
        "<rootDir>/dist/",
        "<rootDir>/cypress/",
        "<rootDir>/src/test.ts/"
    ],
    reporters: [ "default" ],
    testMatch: [
        "<rootDir>/src/exposures/**/*.spec.ts"
    ]
  };
Run Code Online (Sandbox Code Playgroud)

测试设置.ts

import 'jest-preset-angular/setup-jest';
import '@angular/localize/init';
Object.defineProperty(window, 'CSS', { value: null }); …
Run Code Online (Sandbox Code Playgroud)

jestjs babel-jest ts-node angular ts-jest

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