代码之家  ›  专栏  ›  技术社区  ›  rupav jain

开玩笑吧。any()未按预期工作

  •  35
  • rupav jain  · 技术社区  · 8 年前

    所以当测试我的 减速器 在一个基于Preact(使用JEST进行测试时的反应没有太大不同)的项目中,我遇到了以下问题:

    运行jest测试时出现以下输出-

    ● should setup 
    
        expect(received).toEqual(expected)
    
        Expected value to equal:
          {"ID": Any<String>, "active": true, "data": Any<Array>}
        Received:
          {"ID": "BysnEuMlm", "active": true, "data": [{"ID": "Hy7wMAz1lm", "code": "dat.fle", "label": "CRES/datum14.cdata", "name": "File", "status": "READY", "value": {"format": "cdata", "name": "datum14.cdata", "path": "CRES"}}, {"ID": "rkB7RMkeX", "code": "prp.kcv", "label": "3 folds", "name": "k-Fold Cross-Validation", "status": "READY", "value": "3"}, {"ID": "ByCmRfygQ", "code": "ats", "label": undefined, "name": " Best First +  Cfs Subset Eval", "status": "READY", "value": {"evaluator": {"name": "CfsSubsetEval"}, "search": {"name": "BestFirst", "options": ["-D", "1", "-N", "5"]}, "use": true}}, {"ID": "HkmVAM1l7", "code": "lrn", "label": undefined, "name": "Naive Bayes", "status": "READY", "value": {"label": "Naive Bayes", "name": "bayes.NaiveBayes", "use": true}}], "output": {"format": "pipeline", "name": "jestReact.cpipe", "path": "/home/rupav/opensource/candis/CRES"}}
    
        Difference:
    
        - Expected
        + Received
    
          Object {
        -   "ID": Any<String>,
        +   "ID": "BysnEuMlm",
            "active": true,
        -   "data": Any<Array>,
        +   "data": Array [
        +     Object {
        +       "ID": "Hy7wMAz1lm",
        +       "code": "dat.fle",
        +       "label": "CRES/datum14.cdata",
        +       "name": "File",
        +       "status": "READY",
        +       "value": Object {
        +         "format": "cdata",
        +         "name": "datum14.cdata",
        +         "path": "CRES",
        +       },
        +     },
        +     Object {
        +       "ID": "rkB7RMkeX",
        +       "code": "prp.kcv",
        +       "label": "3 folds",
        +       "name": "k-Fold Cross-Validation",
        +       "status": "READY",
        +       "value": "3",
        +     },
        +     Object {
        +       "ID": "ByCmRfygQ",
        +       "code": "ats",
        +       "label": undefined,
        +       "name": " Best First +  Cfs Subset Eval",
        +       "status": "READY",
        +       "value": Object {
        +         "evaluator": Object {
        +           "name": "CfsSubsetEval",
        +         },
        +         "search": Object {
        +           "name": "BestFirst",
        +           "options": Array [
        +             "-D",
        +             "1",
        +             "-N",
        +             "5",
        +           ],
        +         },
        +         "use": true,
        +       },
        +     },
        +     Object {
        +       "ID": "HkmVAM1l7",
        +       "code": "lrn",
        +       "label": undefined,
        +       "name": "Naive Bayes",
        +       "status": "READY",
        +       "value": Object {
        +         "label": "Naive Bayes",
        +         "name": "bayes.NaiveBayes",
        +         "use": true,
        +       },
        +     },
        +   ],
        +   "output": Object {
        +     "format": "pipeline",
        +     "name": "jestReact.cpipe",
        +     "path": "/home/rupav/opensource/candis/CRES",
        +   },
          }
    

    以下是测试用例:

    test('should setup ', () => {
        const state = documentProcessor(
            undefined,
            {
                type: ActionType.Asynchronous.READ_SUCCESS,
                payload: dokuments.active
        })
        // expect(state.active.ID).toEqual(expect.any(String)) - Test case passes iff I run this test with this command only.
        expect(state.active).toEqual({
            data: expect.any(Array),
            active: true,
            ID: expect.any(String),
        })
    
    })
    

    由于在调用该减速机时状态会发生更改,因此我需要使用 expect.any 函数,但根据输出,虽然类型相同,但测试并没有通过。 它的出现出乎意料 Any<String> 。

    2 回复  |  直到 8 年前
        1
  •  39
  •   Adam Azad    5 年前

    expect.toEqual 检查是否相等 state.active 在你的情况下。要实现你想要的,你必须 expect 声明:

    expect(state.active.active).toEqual(true)
    expect(state.active.data).toEqual(expect.any(Array))
    expect(state.active.ID).toEqual(expect.any(String))
    
        2
  •  23
  •   Ilarion Halushka    6 年前

    您可以使用 toMatchObject :

    expect(state.active).toMatchObject({
        active: true,
        data: expect.any(Array),
        ID: expect.any(String)
    });
    

    参见官方文档中的更多示例: https://jestjs.io/docs/en/expect#tomatchobjectobject