通过测试咖啡馆上传文件会导致Fine Uploader库出错

时间:2018-03-05 19:17:35

标签: javascript fine-uploader testcafe

在测试咖啡馆中运行应用程序时上传文件时,我会收到以下问题和堆栈跟踪:

conn = pyodbc.connect("DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};" + \
                      "DBQ=C:\\Users\\jmtr\\Documents\\IRST_old.accdb;")

在运行“determineKeyName”时调试堆栈跟踪keyNameLogic是一个函数。然后运行此函数并返回undefined。

我相信正在运行的功能就是这个:

hammerhead.js:2 [Fine Uploader 5.15.6] Failed to retrieve key name for 0.  Reason: null
window.console.(anonymous function) @ hammerhead.js:2
__stack_frame_overlay_proxy_console__ @ bundle.js:80994
r @ hammerhead.js:9
value @ hammerhead.js:2
./node_modules/fine-uploader/s3.fine-uploader/s3.fine-uploader.core.js.qq.log @ bundle.js:26539
log @ bundle.js:27561
onFailure @ bundle.js:32615
_handleKeynameFunction @ bundle.js:32621
_determineKeyName @ bundle.js:32603
(anonymous) @ bundle.js:26829
promise @ bundle.js:33630
start @ bundle.js:33688
sendNext @ bundle.js:29341
sendNext @ bundle.js:29335
sendNext @ bundle.js:29335
now @ bundle.js:29557
maybeSendDeferredFiles @ bundle.js:29530
maybeDefer @ bundle.js:29512
start @ bundle.js:29565
upload @ bundle.js:29578
_uploadFile @ bundle.js:28602
_onSubmitCallbackSuccess @ bundle.js:28412
(anonymous) @ bundle.js:26829
(anonymous) @ bundle.js:28082
Promise.then (async)
_handleCheckedCallback @ bundle.js:28080
_upload @ bundle.js:28593
(anonymous) @ bundle.js:28489
then @ bundle.js:27079
_onValidateCallbackSuccess @ bundle.js:28488
(anonymous) @ bundle.js:26829
(anonymous) @ bundle.js:28082
Promise.then (async)
_handleCheckedCallback @ bundle.js:28080
_onValidateBatchCallbackSuccess @ bundle.js:28465
(anonymous) @ bundle.js:26829
(anonymous) @ bundle.js:28082
Promise.then (async)
_handleCheckedCallback @ bundle.js:28080
_prepareItemsForUpload @ bundle.js:28501
addFiles @ bundle.js:27429
(anonymous) @ bundle.js:141335
eventChannel @ bundle.js:98272
_callee$ @ bundle.js:141334
tryCatch @ bundle.js:3376
invoke @ bundle.js:3603
(anonymous) @ bundle.js:3424
r @ hammerhead.js:9
value @ hammerhead.js:2
step @ bundle.js:141141
(anonymous) @ bundle.js:141141
Promise.then (async)
step @ bundle.js:141141
(anonymous) @ bundle.js:141141
(anonymous) @ bundle.js:141141
uploadFile @ bundle.js:141362
runCallEffect @ bundle.js:99260
runEffect @ bundle.js:99182
next @ bundle.js:99062
currCb @ bundle.js:99135
takeCb @ bundle.js:99213
put @ bundle.js:98192
(anonymous) @ bundle.js:98280
r @ hammerhead.js:9
value @ hammerhead.js:2
emit @ bundle.js:98145
(anonymous) @ bundle.js:98710
(anonymous) @ bundle.js:140132
continueAllFiles @ bundle.js:140131
onClick @ bundle.js:139876
apply @ bundle.js:44333
baseInvoke @ bundle.js:45997
apply @ bundle.js:44334
(anonymous) @ bundle.js:52088
Button._this.handleClick @ bundle.js:108472
callCallback @ bundle.js:63947
dispatchEvent @ hammerhead.js:3
invokeGuardedCallbackDev @ bundle.js:63986
invokeGuardedCallback @ bundle.js:63843
invokeGuardedCallbackAndCatchFirstError @ bundle.js:63857
executeDispatch @ bundle.js:64241
executeDispatchesInOrder @ bundle.js:64263
executeDispatchesAndRelease @ bundle.js:64361
executeDispatchesAndReleaseTopLevel @ bundle.js:64372
forEachAccumulated @ bundle.js:64340
processEventQueue @ bundle.js:64517
runEventQueueInBatch @ bundle.js:66996
handleTopLevel @ bundle.js:67005
handleTopLevelImpl @ bundle.js:66736
batchedUpdates @ bundle.js:74471
batchedUpdates @ bundle.js:65719
dispatchEvent @ bundle.js:66810
(anonymous) @ hammerhead.js:4

这表明也许“awsKeys”未定义。

有谁知道可能导致这种情况的原因是什么?在testCafe测试之外执行相同的步骤env工作正常(单击上载并从目录中选择文件)

我可以看到,如果在测试咖啡馆外面上传会创建一个文件对象,可以通过测试咖啡馆上传创建一个“Blob”对象。

1 个答案:

答案 0 :(得分:2)

目前从集成测试方面尚不知道此修复程序。我认为需要在上传之前修改testcafe或锤头的bug报告或功能请求,以修改文件。

如果您能够修复客户端代码,则可以添加类似这样的内容,以在运行时检查文件是否为Blob,并将其转换为文件。

// if no lastModified set then image was uploaded as a Blob instead of a File
if (!image.lastModified) {
  image = new File([image], image.name);
}

我对Fine Uploader库不是很熟悉,但是另一个可能的解决方案(也是客户端)可能是使用URL.createObjectURL(blob) API,但是您要确保调用{{3} }清理方法。我正在使用URL.revokeObjectURL进行测试,它允许将图像作为URL或文件进行传递。