angular - 在 Angular 中使用 TypeScript 对文件大小进行 Jasmine 单元测试

标签 angular file typescript unit-testing jasmine

正在寻找如何在输入类型为"file"更改事件时测试文件大小的最佳实践。

现在我的测试规范如下:

it('attach file with too large size', () => {
  const file: File = {
    name: 'filename',
    type: 'image/png',
    size: 8242880,
    lastModified: 1,
    lastModifiedDate: new Date(),
    webkitRelativePath: '',
    msClose: () => {},
    msDetachStream: () => {},
    slice: (): Blob => null,
  };
  const event = { target: { files: [file] } };

  component.onFileChange(event); // file validation happens into it too

  const error = control.getError('file_size');
  expect(error).toBeTruthy();
});

有没有更好的方法来使用 TypeScript 设置文件大小属性? 当我尝试将 size 属性直接设置为 File 对象时,这是不允许的,因为 size 属性是只读

const file = new File([''], 'filename', { type: 'image/png' });
file.size = 8242880; // TS error

我在需要为我定义所有 File 对象属性的地方模拟 File 对象的当前方式看起来不是很漂亮,但找不到更好的方法。 有什么想法吗?

最佳答案

您可以使用 Object.defineProperty覆盖大小属性。

/** Creates a "1TB" file given the file name. */
function getHugeFile(name: string) : File {
  const file = new File([''], name);
  Object.defineProperty(
      file, 'size', {value: Math.pow(1024, 4), writable: false});
  return file;
}

关于angular - 在 Angular 中使用 TypeScript 对文件大小进行 Jasmine 单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51744005/

相关文章:

angular - 如何在 Angular 6 中导入 ag-grid 主题

angular - Typescript 类构造函数中“找不到名称”

java - 读取带有可能由空格分隔的整数的文件

reactjs - 如何在 React 中通过单击按钮打开 <input type ="file"/>

angular - 将新创建的 angular cli 项目转换为使用 mocha 框架而不是 jasmine

java - move 文件失败

visual-studio - 您可以将文档和电子表格添加到 Visual Studio 项目吗?

javascript - Jest 测试运行 - 找不到模块错误

javascript - 使用 map/reduce 递归计算状态?

angular - 使用 primeng p-datatable 自定义排序不起作用