Javascript 如何使用Cypress上传txt文件进行API测试-XMLHTTPRequest?

Javascript 如何使用Cypress上传txt文件进行API测试-XMLHTTPRequest?,javascript,typescript,file-upload,blob,cypress,Javascript,Typescript,File Upload,Blob,Cypress,我正在尝试测试一个端点,它将上传一个文件,并在cypress中给出200个响应状态代码。根据一些研究,cy.request不能用于上载多部分/表单数据的文件,因此我们需要使用XMLHttp来上载此类文件。我创建了下面的文件来测试api,但它不起作用。有人能帮我一下我的代码出了什么问题吗?多谢各位 在support/commands.ts下添加了下面的代码(我需要一个头从auth端点传递令牌) 要调用multipartFormRequest的测试文件: const fileName = 'test

我正在尝试测试一个端点,它将上传一个文件,并在cypress中给出200个响应状态代码。根据一些研究,cy.request不能用于上载多部分/表单数据的文件,因此我们需要使用XMLHttp来上载此类文件。我创建了下面的文件来测试api,但它不起作用。有人能帮我一下我的代码出了什么问题吗?多谢各位

在support/commands.ts下添加了下面的代码(我需要一个头从auth端点传递令牌)

要调用multipartFormRequest的测试文件:

const fileName = 'test_file.txt';
                    const method = 'POST';
                    const URL = "https://fakeurl.com/upload-file";
                    const headers = api.headersWithAuth(`${authToken}`);
                    const fileType = "application/text";

                    cy.fixture(fileName, 'binary').then((res) => {
                        const blob = Cypress.Blob.binaryStringToBlob(res, fileType);
                            const formData = new FormData();
                            formData.append('file', blob, fileName);

                            cy.multipartFormRequest(method, URL, headers, formData, function (response) {
                                expect(response.status).to.equal(200);
                            })
                        })
我收到以下错误消息:- 现在,我得到的状态代码为0。

使用

const blob=Cypress.blob.binaryStringToBlob(res,fileType);
然后拆下
。然后()

历史

版本5.0.0
更改:
arrayBufferToBlob、base64StringToBlob、binaryStringToBlob和dataURLToBlob方法的返回类型从
Promise
更改为
Blob


改为尝试
fetch
。还要检查cors,检查控制台日志,检查开发工具中的“网络”选项卡。@John,我正在使用cypress运行,所以我在开发工具的日志中没有看到任何错误。有没有我可以参考的fetch示例?这将至少消除blob函数错误。然而,现在我得到了不同事件状态的响应。知道这里怎么了吗@hiram
const fileName = 'test_file.txt';
                    const method = 'POST';
                    const URL = "https://fakeurl.com/upload-file";
                    const headers = api.headersWithAuth(`${authToken}`);
                    const fileType = "application/text";

                    cy.fixture(fileName, 'binary').then((res) => {
                        const blob = Cypress.Blob.binaryStringToBlob(res, fileType);
                            const formData = new FormData();
                            formData.append('file', blob, fileName);

                            cy.multipartFormRequest(method, URL, headers, formData, function (response) {
                                expect(response.status).to.equal(200);
                            })
                        })