Javascript Cypress:使用或与expect一起使用

Javascript Cypress:使用或与expect一起使用,javascript,unit-testing,testing,cypress,chai,Javascript,Unit Testing,Testing,Cypress,Chai,我正在使用cypress,并且有一个具有某些属性的对象,例如: const对象={ 答:1,, b:2, c:3 } 我想在那里检查此对象: 两者都不应具有属性myProp 或者应该将属性myProp作为空字符串 或者应该将属性myProp设置为未定义 我首先尝试了前两个条件,但失败了,因此无法满足所有3个条件 这就是我所尝试的: expect(obj) .other.not.to.have.a.property('myProp')) .或.to.have.a.property('myProp

我正在使用cypress,并且有一个具有某些属性的对象,例如:

const对象={
答:1,,
b:2,
c:3
}
我想在那里检查此对象:

  • 两者都不应具有属性
    myProp
  • 或者应该将属性
    myProp
    作为空字符串
  • 或者应该将属性
    myProp
    设置为未定义
  • 我首先尝试了前两个条件,但失败了,因此无法满足所有3个条件

    这就是我所尝试的:

    expect(obj)
    .other.not.to.have.a.property('myProp'))
    .或.to.have.a.property('myProp')
    .即.is.a('string')。和.is.empty;
    
    我看到的错误是:

    请帮助我:

  • 使用/或
  • 检查所有3个条件

  • 您可以使用自定义匹配器,这是一个具有任意复杂度并返回true或false的函数

    功能检查myprop(obj){
    常量myProp=obj['myProp'];
    返回myProp==未定义||
    (myProp!==未定义和类型的myProp==='string'&&myProp==='');
    }
    它('当myProp不存在时成功',()=>{
    常量obj={a:1,b:2,c:3}
    expect(obj).to.success(检查myProp,“myProp满足条件”);
    })
    它('当myProp为空字符串时成功',()=>{
    常量obj={a:1,b:2,c:3,myProp:'}
    expect(obj).to.success(检查myProp,“myProp满足条件”);
    })
    它('当myProp是字符串但不是空时失败',()=>{
    const obj={a:1,b:2,c:3,myProp:'myValue'}
    expect(obj).to.success(检查myProp,“myProp满足条件”);
    })
    它('当myProp是一个数字时失败',()=>{
    const obj={a:1,b:2,c:3,myProp:4}
    expect(obj).to.success(检查myProp,“myProp满足条件”);
    })
    

    如果要在测试中配置匹配器,请使用高阶函数(返回函数的函数)

    功能匹配器(道具){
    返回(obj)=>{
    常量myProp=obj[prop];
    返回myProp==未定义||
    (myProp!==未定义和类型的myProp==='string'&&myProp==='');
    }
    }
    它('当myProp不存在时成功',()=>{
    常量obj={a:1,b:2,c:3}
    expect(obj).to.emission(matcher for('myProp'),'myProp满足条件');
    })
    

    或作为一行(检查类型隐含在
    ==
    运算符中)

    const matcherFor=(prop)=>(obj)=>obj[prop]==未定义的对象[prop]===”;
    

    可以使用与
    .should()
    相同的语法作为命令中的验证步骤

    it('作为测试链中的验证步骤',()=>{
    常量obj={a:1,b:2,c:3}
    cy.wrap(obj)
    。应('success',matcher for('myProp'),'myProp符合标准')
    .然后(obj=>{
    //进程对象
    })
    })