我是新来理解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,但是,我还不确定它是否可以在使用前配置对等依赖项,因为它将由主机包执行。
反馈和建议最受赞赏。
我已经阅读过帖子并对拉取请求进行了代码审查,例如: “如何创建和审查 GitHub 拉取请求”
GitHub 问题:您(作为个人贡献者)一直致力于编写您提交给 GitHub 的代码体有一段时间了。然后在 GitHub 中,您希望其他人对提交主分支进行代码审查,并希望他们添加他们的建议。
基本上在 GitHub 上,邀请 GitHub 上的其他人对 master 分支中提交的代码进行完整的代码审查,并允许添加他们的更改建议。如果请求对拉取请求进行代码审查,则具有相同的代码审查体验。
这在 GitHub 中可能吗?
谢谢
据我所知,Cypress 不允许从一个域翻转到另一个域,因为它会出错:
chrome-error://chromewebdata/
Run Code Online (Sandbox Code Playgroud)
但是,我需要一个解决方法。我正在为多种环境提供测试集:STAGE、DEMO、PROD。
使用DEMO和PROD,在身份验证阶段(用户名/密码),保持在同一域中:
https://[demo|www].foo.comhttps://account.foo.com/auth>>用户名>>密码https://[demo|www].foo.com/action...使用STAGE,身份验证阶段翻转到另一个域:
https://[stage].foo.comhttps://account.bar.com/auth>>用户名>>密码https://[stage].foo.com/action...因此,由于域翻转, Cypress 无法从VISIT重定向到AUTH 。这阻碍了STAGE的测试的阻塞测试。
有哪些推荐的解决方法?
cy.request()?参考:
谢谢,非常感谢您的帮助。
为了进行彻底的测试,我的服务(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 …
我已经创建了一个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 个字符宽度的编辑器中可读。
要运行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 …
我正在将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) 目标 能够对整个测试套件执行多次重试,直到所有测试都成功。
而不是配置测试套件中每个测试允许的重试,如配置测试重试:全局配置所定义
如何提供测试套件重试?
如果测试套件中的任何测试失败,则重新开始并再次重试整个测试套件,直到测试套件中的所有测试成功为止,或者当整个测试套件重试次数超过请求的重试次数时停止。
在以下代码中,配置适用于测试套件中每个测试的重试尝试。
此测试套件的预期目标是,测试'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) 我目前正在使用 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 运行表明它失败了:
以下阶段实际上是失败的原因,并且在捕获错误时被跳过,但是,此阶段显示绿色(成功)并且更愿意将其呈现为红色(失败):
最后的后期操作显示为黄色(不稳定),通常显示为绿色(成功):
感谢您的阅读,始终感谢您的帮助。
参考: 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) 在 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) 了解Cypress 示例:然而,动态测试提供的示例解决了对基本类型 ( string、number) 的静态列表进行迭代的问题,并且未收集 的子类型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 ×5
node.js ×2
npm ×2
amazon-polly ×1
atomic ×1
datatables ×1
github ×1
gulp-mocha ×1
jenkins ×1
mocha.js ×1
mongodb ×1
mongoose ×1
npm-scripts ×1
package.json ×1
redirect ×1
test-suite ×1
xvfb ×1