ember cli 中文件上传的验收测试
Acceptance test for file uploading in ember cli
我想在 ember 中创建一个上传文件的基本验收测试。
我可以用 Pretender 模拟服务器,但我需要知道如何用我的文件系统中的文件填充 input type="file"
字段。所以问题基本上是:
- 如何使用 ember 测试助手填充输入文件字段,我是否使用
fillIn
助手?
- 如何将示例文件添加到文件夹并从我的验收测试中获取它们。是否可以从验收测试中获取我的 Ember 项目的当前路径到要上传的文件系统中的 select 文件?在 Rails 中,我们使用
Rails.root
来达到这个目的。
您不能使用 fillIn
之类的东西来设置文件字段,其中包含准备上传的文件值,因为浏览器不允许您:
How to set a value to a file input in HTML?
我认为解决这个问题的唯一可能方法是使用 xhr 下载服务器上存在的文件,然后使用 xhr 上传它。我想不出有什么方法可以在不引入我链接到的那个 SO 问题中解释的安全问题的情况下以编程方式设置文件输入字段的值。
从 http url 下载演示文件后,您可以从这里开始使用要测试上传的演示文件:https://developer.mozilla.org/en-US/docs/Web/API/FileReader
我的解决方法不同:我不从文件系统上传文件,而是手动创建一个 Blob 并在输入元素上使用 triggerHandler:
let inputElement = $('input[type=file]');
let blob = new Blob(['foo', 'bar'], {type: 'text/plain'});
blob.name = 'foobar.txt';
inputElement.triggerHandler({
type: 'change',
target: {
files: {
0: blob,
length: 1,
item() { return blob; }
}
}
});
这会触发上传。
我想在 ember 中创建一个上传文件的基本验收测试。
我可以用 Pretender 模拟服务器,但我需要知道如何用我的文件系统中的文件填充 input type="file"
字段。所以问题基本上是:
- 如何使用 ember 测试助手填充输入文件字段,我是否使用
fillIn
助手? - 如何将示例文件添加到文件夹并从我的验收测试中获取它们。是否可以从验收测试中获取我的 Ember 项目的当前路径到要上传的文件系统中的 select 文件?在 Rails 中,我们使用
Rails.root
来达到这个目的。
您不能使用 fillIn
之类的东西来设置文件字段,其中包含准备上传的文件值,因为浏览器不允许您:
How to set a value to a file input in HTML?
我认为解决这个问题的唯一可能方法是使用 xhr 下载服务器上存在的文件,然后使用 xhr 上传它。我想不出有什么方法可以在不引入我链接到的那个 SO 问题中解释的安全问题的情况下以编程方式设置文件输入字段的值。
从 http url 下载演示文件后,您可以从这里开始使用要测试上传的演示文件:https://developer.mozilla.org/en-US/docs/Web/API/FileReader
我的解决方法不同:我不从文件系统上传文件,而是手动创建一个 Blob 并在输入元素上使用 triggerHandler:
let inputElement = $('input[type=file]');
let blob = new Blob(['foo', 'bar'], {type: 'text/plain'});
blob.name = 'foobar.txt';
inputElement.triggerHandler({
type: 'change',
target: {
files: {
0: blob,
length: 1,
item() { return blob; }
}
}
});
这会触发上传。