如何在 Jasmine/Karma 测试中加载二进制文件?

问题描述 投票:0回答:1

我有一个 Angular 项目,可以从用户输入中解析二进制文件。这使得单元测试变得困难。我希望能够将这些文件包含在我的 Jasmine/Karma 测试中,这些测试在浏览器中运行。

我发现我可以使用 Karma 的

files
属性 将这些文件包含到 Karma 中,以便可以加载它们。

karma.conf.js

files: [
  {
    pattern: "sample-files/*.sbsong",
    watched: false,
    served: true,
    included: false,
  },
],

现在我尝试将此文件加载到这样的测试中

it('should parse a binary file', () =>{
  const file  = require('/sample-files/song1.sbsong');
  
  const parsedFile = parser(file);
  expect(parsedFile).toEqual('foo');
});

这会生成错误,但它也确认文件路径是正确的并且可以看到该文件

./sample-files/song1.sbsong:1:0 - Error: Module parse failed: Unexpected token (1:0)
You may need an appropriate loader to handle this file type, currently no loaders are configured to process this file.
See https://webpack.js.org/concepts#loaders
(Source code omitted for this binary file)

这感觉非常接近,但是我怎样才能让 karma 或 webpack 只给我这个文件的数据,以便我可以将它传递给我的解析器进行单元测试?目前它似乎正在尝试将这些文件作为 JavaScript 模块加载,但我只想获取原始文件内容。

unit-testing webpack karma-jasmine
1个回答
0
投票

在开源项目 Koia.io 中,我加载了一个 Excel 文件,以便在

excel-reader.spec.ts
中定义的 Jasmine 单元测试中使用。

为此,我必须在 karma.conf.js 中定义文件,如下所示:

files: [
   ...  
   { 
     pattern: 'src/app/shared/services/reader/excel/test.xlsx', 
     included: false, 
     watched: false, 
     served: true 
   }
]

excel-reader.spec.ts
里面的相关函数是
loadExcelFile

async function loadExcelFile(): Promise<File> {
  const response = await fetch(EXCEL_FILE_URL);
  const blob = await response.blob();
  return new File([blob], 'test.xlsx');
} 
© www.soinside.com 2019 - 2024. All rights reserved.