小编Jef*_*ner的帖子

如何使用 peerDependencies 测试 npm 模块?

我是新来理解peerDependencies,我已经阅读了以下参考资料,寻求如何测试 npm 模块在其 package.json 中包含 peerDependencies :

但是,我还没有找到使用 peerDependencies 测试 npm 的明确解决方案。有些人建议将 peerDependencies 添加为全局变量,有些人建议将 peerDependencies 包含在 devDependencies 中,但这似乎都不对。

例如,我有一个具有对等依赖项的包,一个自定义记录器,并且该记录器需要由其主机包配置才能使用。

这是我使用此 Gulp 任务执行大多数脚本测试的方式:

function testRunner() {
  return (
    gulp
      .src('./tests/**/*.js', { read: false })
      .pipe(
        mocha({
          exit: true,
          timeout: 10000
        })
      )
      .on('error', console.error)
  );
}
Run Code Online (Sandbox Code Playgroud)

我确实收到了一个有用的建议(请参阅下面的评论,@estus)使用npm-install-peers,但是,我还不确定它是否可以在使用前配置对等依赖项,因为它将由主机包执行。

反馈和建议最受赞赏。

mocha.js node.js npm gulp-mocha peer-dependencies

25
推荐指数
2
解决办法
4904
查看次数

如何在 GitHub 中提交的主分支上请求代码审查?

我已经阅读过帖子并对拉取请求进行了代码审查,例如: “如何创建和审查 GitHub 拉取请求”

GitHub 问题:您(作为个人贡献者)一直致力于编写您提交给 GitHub 的代码体有一段时间了。然后在 GitHub 中,您希望其他人对提交主分支进行代码审查,并希望他们添加他们的建议。

基本上在 GitHub 上,邀请 GitHub 上的其他人对 master 分支中提交的代码进行完整的代码审查,并允许添加他们的更改建议。如果请求对拉取请求进行代码审查,则具有相同的代码审查体验。

这在 GitHub 中可能吗?

谢谢

github github-codereviews

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

Cypress:登录身份验证重定向到另一个域:解决方法?

据我所知,Cypress 不允许从一个域翻转到另一个域,因为它会出错:

chrome-error://chromewebdata/
Run Code Online (Sandbox Code Playgroud)

但是,我需要一个解决方法。我正在为多种环境提供测试集:STAGE、DEMO、PROD。

使用DEMOPROD,在身份验证阶段(用户名/密码),保持在同一域中:

  • 访问https://[demo|www].foo.com
  • 授权https://account.foo.com/auth>>用户名>>密码
  • 同意https://[demo|www].foo.com/action...

使用STAGE,身份验证阶段翻转到另一个域:

  • 访问https://[stage].foo.com
  • 授权https://account.bar.com/auth>>用户名>>密码
  • 同意https://[stage].foo.com/action...

因此,由于域翻转, Cypress 无法从VISIT重定向到AUTH 。这阻碍了STAGE的测试的阻塞测试。

有哪些推荐的解决方法?

  • 傀儡师?
  • 原生赛普拉斯使用cy.request()

参考:

谢谢,非常感谢您的帮助。

authentication redirect cypress

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

Cypress:等待不可预测的组件从专有集合中渲染?

为了进行彻底的测试,我的服务(UI+后端)通过多个部署环境进行迁移:ex DEV、STAGE、DEMO 和 PROD。当该服务迁移这些测试环境时,其 UI 会等待来自后端的异步更新,这作为测试压力源可能会异常缓慢;因此,加快速度不是一种选择,也不是嘲笑响应。

UI 测试涉及等待异步更新响应以确定将专门呈现哪些 React 组件。这些 React 组件将是具有不可预测内容/文本的部分/div,因此不是一个选项。Cypress contains

处理缓慢异步更新的典型解决方案是使用固定延迟Cypress wait:一堆毫秒、十分之几秒,甚至几秒。然而,固定延迟越长,您的测试就越脆弱

这是我的脆弱 Cypress 测试代码的示例:

cy.get('div.main')
  .then( ($divMain) => {
    cy.wait(5000) // wait 5 seconds

    const boolStateA = $divMain.find('section.A').length > 0;
    const boolStateB = $divMain.find('section.B').length > 0;

    if (boolStateA( {
      // Do ...
    } else if ( boolStateB ) {
      // Do something else ...
    }
  })
Run Code Online (Sandbox Code Playgroud)

然而,等待 5 …

cypress

7
推荐指数
3
解决办法
2万
查看次数

npm package.json:如何包装长的单函数脚本?

我已经创建了一个npm 包脚本npx depcheck,它的参数之一是--ignore,它的值越来越长,我预计会越来越长。

"audit:depcheck": "npx depcheck --specials=bin --ignore-dirs=dist,node_modules --ignores=tslint,gts,ts-node,ts-node-dev,typescript,mocha,winston,passport-springcm,passport-box,passport-dropbox-oauth2,passport-google-oauth20,passport-microsoft,mocha,nyc",
Run Code Online (Sandbox Code Playgroud)

尝试过:我曾尝试将很长的脚本简单地分成新行,但这种方法不符合 JSON 标准。

目标:做同样的事情,但在 110 个字符宽度的编辑器中可读。

npm package.json npm-scripts

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

Cypress 和 Jenkins:通过 Jenkinsfile 安装系统依赖项“xvfb”

要运行Cypress,需要安装系统依赖项,Cypress Dependencies

apt-get install libgtk2.0-0 libgtk-3-0 libnotify-dev 
libgconf-2-4 libnss3 libxss1 libasound2 libxtst6 xauth xvfb
Run Code Online (Sandbox Code Playgroud)

为了在本地 Jenkins 中运行 Cypress 脚本,我正在创建一个Jenkinsfile.

Jenkinsfile 在 Jenkins 中有一个 stage 命令npx cypress run,并且失败了"Your system is missing the dependency: Xvfb"

首先想到的是安装npm package xvfb,但这并没有解决问题。

然后,我通过本地 Jenkins 安装了Jenkins 插件 Xvfb,这成功了!

我的目标是在远程 Jenkins 上运行 Cypress,但它以同样的方式失败"Your system is missing the dependency: Xvfb"

重要提示:我无权访问远程 Jenkins 服务和命令Manage Plugins来请求安装Jenkins 插件 Xvfb

由于不清楚如何通过Jenkins 插件 XvfbJenkinsfile …

jenkins xvfb jenkins-pipeline cypress

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

AWS Polly v3:SynthesizeSpeech 'mp3',AudioStream 不是 instanceOf Buffer

我正在将Javascript(节点)中的AWS Polly代码从v2转换为v3

使用AWS Polly v3 synthesizeSpeech()时,如何将返回的值转换data.AudioStream为 的实例Buffer

以下 JavaScript 代码使用v2运行,返回的audio.AudioStream是 的实例Buffer

const { Polly } = require('aws-sdk');

// Create an Polly client
const polly = new Polly({
    signatureVersion: 'v4',
    region: process.env.AWS_DEFAULT_REGION
});

const params = {
    OutputFormat: 'mp3',
    VoiceId: voiceId,
    TextType: 'ssml',
    Text: '<speak><prosody rate="85%">Hello World</prosody></speak>'
};

// ***

return await polly
    .synthesizeSpeech(params)
    .promise()
    .then(data => {
         if (data.AudioStream instanceof Buffer) {
             return …
Run Code Online (Sandbox Code Playgroud)

node.js amazon-polly

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

Cypress:如何重试整个测试套件?

目标 能够对整个测试套件执行多次重试,直到所有测试都成功。

而不是配置测试套件中每个测试允许的重试,如配置测试重试:全局配置所定义

如何提供测试套件重试?

如果测试套件中的任何测试失败,则重新开始并再次重试整个测试套件,直到测试套件中的所有测试成功为止,或者当整个测试套件重试次数超过请求的重试次数时停止。

在以下代码中,配置适用于测试套件中每个测试的重试尝试。

此测试套件的预期目标是,测试'TEST counter'预计会失败,直到增量_counter等于_runModeRetries,然后才预计会成功。重复整个测试套件意味着重新运行测试'TEST counter'之前的每个测试,直到成功。

然而,发生的情况是,只有test'TEST counter'被重试了_runModeRetries几次,并且_counter不会增加,因为test'TEST increment'只被调用一次。

我为什么要这个?

我的测试套件包含一系列需要按顺序运行的测试,如果测试失败,则重试需要重新启动序列。例如,仅当通过完整的测试套件重再次调用测试_counter时才能递增。'TEST increment'

我如何进行测试套件重试?

  let _counter = 0;
  const _runModeRetries = 3;

  context(
    'CONTEXT Cypress Retries',
    {
      retries: {
        runMode: _runModeRetries,
        openMode: 0
      }
    },
    () => {
      it('TEST increment', () => {
        _counter++;
        expect(_counter).to.be.a('number').gt(0);
      });

      it('TEST true', () => {
        expect(true).to.be.a('boolean').to.be.true; …
Run Code Online (Sandbox Code Playgroud)

test-suite cypress

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

詹金斯:捕获错误跳到下一阶段,但仍然显示错误阶段失败

我目前正在使用 JenkinscatchError来捕获某个阶段中是否发生错误,如果是,则跳到下一个阶段。

我想要展示的是,如果某个阶段发现错误,则在 Jenkins 中显示为红色失败),即使该阶段已跳到下一个阶段。

这是 Jenkins 管道阶段的编码方式,以捕获脚本失败时的错误:

    stage('test_run') {
        steps {
            catchError {
                sh """#!/bin/bash -l
                    ***

                    npm run test:run:reporter
                """
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

我在 StackOverflow 中找到了这个解决方案: Jenkins: Ignore failure in pipeline build step

这个解决方案有效,但在 Jenkins 的运行中,失败的阶段是呈现Green(又名Success)。

Jenkins 运行表明它失败了:

詹金斯运行失败

以下阶段实际上是失败的原因,并且在捕获错误时被跳过,但是,此阶段显示绿色(成功)并且更愿意将其呈现为红色(失败)

跳过失败阶段,显示绿色成功

最后的后期操作显示为黄色不稳定),通常显示为绿色成功):

不稳定

感谢您的阅读,始终感谢您的帮助。

jenkins-pipeline

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

jQuery 数据表页面信息

参考: http: //datatables.net/reference/api/page.info()

我正在尝试获取 ajax POST 生成的 jQuery DataTable 的当前分页信息。

使用提供的函数 .page.info(),即使表有多个页面,它也会返回页面和页面的全零。

我的目标是在分页类型“简单”旁边提供分页信息,

[总页数] [<|>] 中的[当前页码] 页

这是结果输出:

Object {
    end: 0
    length: 10
    page: 0
    pages: 0
    recordsDisplay: 0
    recordsTotal: 0
    start: 0
}
Run Code Online (Sandbox Code Playgroud)

这是 jQuery DataTable 代码:

var oSegmentsDatatable = $('table#segments-datatable').DataTable({
    ajax: {
        type: "POST",
        url: urlSegmentsDatatable,
        data: {'advertiser_id':<?=$advertiser_id?>},
        error: function (jqXHR, textStatus, errorThrown) {

        }
    sDom: 'p<"H"f>t<"F"lr>',
    bProcessing: false,
    bServerSide: true,
    responsive: true,
    bFilter:  true,
    sPaginationType: "simple",
    aaSorting: [[8,'desc']],
    bAutoWidth: false,
    aoColumns : [
        { 'sWidth': …
Run Code Online (Sandbox Code Playgroud)

datatables

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

Mongoose:原子 FindOne-Or-Insert(),如果找到则不更新现有实例

在 Mongoose 中,我正在寻求以原子方式执行Model.FindOne-Or-Insert()与当前可用的类似功能和签名的方法,Model.FindOneAndUpdate()除非实例存在(即匹配filter)然后不使用提供的更新object但原样返回找到的实例,如果不存在(即不匹配) with filter) 然后插入object并返回新实例。

我找不到一种方法,Model.FindOneAndUpdate()通过尝试对现有实例进行更改,options并且不提供object不希望在实例存在时不更新的字段来对现有实例执行更新。

因此,我当前的非原子解决方法是Model.FindOne(),如果找不到,则执行Document.save().

const Foo = DB.model('foo', FooSchema)

async function findOneAndUpdateFoo(jsonFoo, next) {

  const filter = {
    deletedAt: null
  }
  if (jsonFoo.dsAccountId) {
    filter.dsAccountId = jsonFoo.dsAccountId
  }
  if (jsonIntegration.dsUserId) {
    filter.dsUserId = jsonIntegration.dsUserId
  }
  if (jsonFoo.providerId) {
    filter.providerId = jsonFoo.providerId
  }

  const fooDoc = {
    name: jsonFoo.name,
    dsAccountId: jsonFoo.dsAccountId,
    dsUserId: jsonFoo.dsUserId, …
Run Code Online (Sandbox Code Playgroud)

atomic mongoose mongodb

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

Cypress:动态测试:验证表中的行

目标是迭代表并为每一行动态创建测试以验证其状态。表示例: 表,第一列 GUID 标签,第三列状态

了解Cypress 示例:然而,动态测试提供的示例解决了对基本类型 ( stringnumber) 的静态列表进行迭代的问题,并且未收集 的子类型JQuery<HTMLElement>

行按标有 GUID 标签的第一列进行分组。下面的代码收集包含特定 GUID 的行标签。添加的测试伪注入it()不起作用,我也不希望它起作用,但这就是我试图用特定 GUID 测试每行状态的方法:

it('TEST Iterate rows matching GUID', () => {
  cy.fixture('esign').then($esignStore => {
   
   expect($esignStore).to.have.property('requestUUID').to.be.a('string').not.empty;
    cy.get('table[data-qa="act_ops_log_table"]').within(() => {
      cy.log('Ops Logs table found');
      cy.get('tbody[data-qa="act_ops_log_table_body"]').then(() => {
        cy.get('tr');
        cy.get('td');
        cy.get('td:nth-child(1)').each(($tableCell, $index, $list) => {
          const textEnvelope = $tableCell.text();
          if (textEnvelope.includes($esignStore.requestUUID)) {

            // pseudo-example of dynamically added test: start
            // it(`TEST ${$index}`, () => {
              cy.get('td:nth-child(3)')
                .eq($index)
                .then($field => {
                  const textStatus = …
Run Code Online (Sandbox Code Playgroud)

cypress

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