Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Typescript Jest.js:在Jest中返回为{}的布尔返回值_Typescript_Jestjs - Fatal编程技术网

Typescript Jest.js:在Jest中返回为{}的布尔返回值

Typescript Jest.js:在Jest中返回为{}的布尔返回值,typescript,jestjs,Typescript,Jestjs,在下面的返回之前,我记录了false的预期值,这让我很困惑,因为我不知道{}是从哪里来的。有人知道原因吗 FAIL functions/src/classes/__tests__/ScriptTag.test.ts constructor ✕ exists() returns false for no matching scriptTag from fake fetch (13ms) ● constructor › exists() returns false for no

在下面的返回之前,我记录了false的预期值,这让我很困惑,因为我不知道
{}
是从哪里来的。有人知道原因吗

 FAIL  functions/src/classes/__tests__/ScriptTag.test.ts
  constructor
    ✕ exists() returns false for no matching scriptTag from fake fetch (13ms)

  ● constructor › exists() returns false for no matching scriptTag from fake fetch

    expect(received).toStrictEqual(expected) // deep equality

    Expected: false
    Received: {}

      168 |     const scriptTagTester = new ScriptTagTester("","", "https://firebaseDomain.com/scriptTag.js");
      169 | 
    > 170 |     await expect(scriptTagTester.exists()).toStrictEqual(false);
          |                                            ^
      171 | 
      172 |   })
      173 |   

  console.log functions/src/classes/ScriptTag.ts:79
    [ 'somescript.js', 'somescript2.js', 'somescript3.js', 'scriptTag.js' ] =====scriptTagFileNames=====

  console.log functions/src/classes/ScriptTag.ts:81
    true =====found===== // this is for a prior test and probably unrelated

  console.log functions/src/classes/ScriptTag.ts:79
    [ 'somescript.js', 'somescript2.js' ] =====scriptTagFileNames=====

  console.log functions/src/classes/ScriptTag.ts:81
    false =====found=====

Test Suites: 1 failed, 1 total
Tests:       1 failed, 6 passed, 7 total
这是测试类和目标类。我正在扩展目标类,以便将其所有方法公开以供测试

ScriptTag.test.js

  test("exists() returns false for no matching scriptTag from fake fetch", async() => {
    jest.spyOn(ScriptTagTester.prototype, "fetchAllScriptTags")
      .mockResolvedValueOnce(dummyScriptTagsMissingTarget);
    const scriptTagTester = new ScriptTagTester("","", "https://firebaseDomain.com/scriptTag.js");

    await expect(scriptTagTester.exists()).toStrictEqual(false);

  })
ScriptTag.ts

protected async exists():Promise{
常量scriptTags:ScriptTagObject[]=等待此操作。fetchAllScriptTags();
常量ScriptTagFileName:string[]=scriptTags.map((scriptTagRecord:ScriptTagObject)=>{
const tagFileName:string=this.getFileName(scriptTagRecord.src);
返回标记文件名;
});
//如果有索引,则返回true,否则返回false
log(scriptTagFileNames,`==scriptTagFileNames===`);
const fileIsFound:boolean=boolean(scriptTagFileNames.indexOf(this.localFileName)>-1);
日志(fileIsFound,`==found===log);
找到返回文件;
}
因此,您应该使用
.resolves
after
expect
函数

简短的anwser:

wait expect(scriptTagTester.exists()).resolves.toStrictEqual(false);
例如

ScriptTag.ts

导出接口ScriptTagObject{
src:字符串;
}
导出类ScriptTag{
localFileName='b.js';
构造函数(a,b,c){}
受保护的异步存在():承诺{
常量scriptTags:ScriptTagObject[]=等待此操作。fetchAllScriptTags();
常量ScriptTagFileName:string[]=scriptTags.map((scriptTagRecord:ScriptTagObject)=>{
const tagFileName:string=this.getFileName(scriptTagRecord.src);
返回标记文件名;
});
log(scriptTagFileNames,`==scriptTagFileNames===`);
const fileIsFound:boolean=boolean(scriptTagFileNames.indexOf(this.localFileName)>-1);
日志(fileIsFound,`==found===log);
找到返回文件;
}
受保护的异步fetchAllScriptTags():Promise{
返回[{src:'a'}];
}
私有getFileName(src){
返回src;
}
}
ScriptTag.test.ts

从“/ScriptTag”导入{ScriptTag,ScriptTagObject};
类ScriptTagTester扩展了ScriptTag{
建造师(a、b、c){
超级(a、b、c);
}
}
描述('ScriptTag',()=>{
test('exists()返回false,表示伪获取中没有匹配的scriptTag',async()=>{
常量dummyScriptTagsMissingTarget:ScriptTagObject[]=[
{src:'somescript.js'},
{src:'somescript2.js'},
{src:'somescript3.js'},
{src:'scriptTag.js'},
];
开玩笑
.spyOn(ScriptTagTester.prototype作为任何“fetchAllScriptTags”)
.mockResolvedValueOnce(dummyScriptTagsMissingTarget);
常量scriptTagTester=新scriptTagTester(“”,,'https://firebaseDomain.com/scriptTag.js');
wait expect((scriptTagTester,如有).exists()).resolves.toStrictEqual(false);
});
});
单元测试结果和覆盖率报告:

PASS src/stackoverflow/59310993/ScriptTag.test.ts
脚本标签
✓ exists()返回false,因为fake fetch中没有匹配的scriptTag(18ms)
console.log src/stackoverflow/59310993/ScriptTag.ts:3266
['somescript.js',
'somescript2.js',
'somescript3.js',
'scriptTag.js']'====scriptTag文件名====='
console.log src/stackoverflow/59310993/ScriptTag.ts:3274
false'====找到====='
--------------|----------|----------|----------|----------|-------------------|
文件|%Stmts |%Branch |%Funcs |%Line |未覆盖行|s|
--------------|----------|----------|----------|----------|-------------------|
所有文件| 94.44 | 100 | 83.33 | 93.75 ||
ScriptTag.ts | 94.44 | 100 | 83.33 | 93.75 | 25|
--------------|----------|----------|----------|----------|-------------------|
测试套件:1个通过,共1个
测试:1项通过,共1项
快照:共0个
时间:5.86秒,估计16秒
源代码: