我有一个 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 模块加载,但我只想获取原始文件内容。
在开源项目 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');
}