Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/462.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 排毒测试+;反应本机+;PockDB应用程序:由于某些PockDB同步,我们的登录测试一直超时失败? 太长,读不下去了_Javascript_React Native_Testing_Pouchdb_Detox - Fatal编程技术网

Javascript 排毒测试+;反应本机+;PockDB应用程序:由于某些PockDB同步,我们的登录测试一直超时失败? 太长,读不下去了

Javascript 排毒测试+;反应本机+;PockDB应用程序:由于某些PockDB同步,我们的登录测试一直超时失败? 太长,读不下去了,javascript,react-native,testing,pouchdb,detox,Javascript,React Native,Testing,Pouchdb,Detox,似乎正在初始化PockDB客户机的一个实例(调用新的PockDB(…))导致某些队列工作程序或后台进程生成,定期向其CouchDB服务器发送网络请求,从而防止我们的解毒测试套件让我们的React本机app+iOS模拟器闲置并继续下一个断言,导致我们的测试失败的原因是应用程序没有响应下面的网络请求或运行时错误:测试失败:找不到“MATCHER(identifier==“foo”)”的元素 我们尝试调用device.disableSynchronization/device.enableSynchr

似乎正在初始化PockDB客户机的一个实例(调用
新的PockDB(…)
)导致某些队列工作程序或后台进程生成,定期向其CouchDB服务器发送网络请求,从而防止我们的解毒测试套件让我们的React本机app+iOS模拟器闲置并继续下一个断言,导致我们的测试失败的原因是
应用程序没有响应下面的网络请求
运行时错误:测试失败:找不到“MATCHER(identifier==“foo”)”的元素

我们尝试调用
device.disableSynchronization
/
device.enableSynchronization
或使用
launchArgs:{detoxURLBlacklistRegex:'.*}
device.setURLBlacklist(['.]])
设置黑名单,但似乎都无法正常工作

有没有办法让Detox忽略PockDB网络请求,或者手动暂停PockDB,这样我们就可以做出下一个断言

概述 我的团队正在尝试使用Detox为运行在React Native构建的模拟器中的iOS应用程序编写登录测试。该应用程序使用PockDB作为其网络/数据层,因此可以连接到远程CouchDB服务器

问题是排毒似乎总是失败/冻结/挂起并超时超过某个点,这基本上是在PockDB初始化时发生的(通过调用
新的PockDB(…)

在我们的测试中,这是使用有效凭据点击登录按钮的副作用:

wait元素(by.id('auth.login.button')).tap(); 该行之前的所有有效断言都可以正常工作(例如,尝试单击忘记密码按钮,查看下一个组件加载,等等)。这条线之后的任何断言都不会成功

wait expect(元素(by.id('auth.linkedin.skip')).tobevible();
即使我们引用的确切组件(
auth.linkedin.skip
)在计时器过期之前在模拟器中清晰可见,这通常会导致以下两种方式之一的故障

场景1-测试因超时而失败 测试将运行很长时间,直到失败,并出现错误消息,表示超过了超时时间,或者更准确地说:

App has not responded to the network requests below:
  (id = 8) invoke: {"type":"expectation","predicate":{"type":"id","value":"auth.linkedin.skip"},"expectation":"toBeVisible"}

That might be the reason why the test "Login test allow existing the existing test user to sign in" has timed out.
在详细模式下,我们还会反复看到这一点,直到它失败:

detox[35499] INFO:  [actions.js] The system is busy with the following tasks:

Dispatch Queue
⏱ Queue: “Main Queue (<OS_dispatch_queue_main: com.apple.main-thread>)” with 2 work items

Run Loop
⏱ “Main Run Loop”

One-time Events
⏱ “Network Request” with object: “URL: “https://our.couch.endpoint/userdb-foo/bar/baz””
⏱ “Network Request” with object: “URL: “https://our.couch.endpoint/userdb-foo/bar/baz””
版本 节点:12.18.3

xcode:12.0.1

package.json:

“@craftzdog/backdb core react native”:“^7.0.0”,
“@craftzdog/pockdb replication react native”:“^7.0.0”,
“排毒”:“^18.9.0”,
“玩笑”:“^25.1.0”,
“小丑马戏团”:“^26.6.3”,
“数据库适配器http”:“^7.2.1”,
“本机sqlite”:“^2.0.0”,
“数据库身份验证”:“^1.1.3”,
“数据库调试”:“^7.2.1”,
“数据库查找”:“^7.2.1”,
“向上插入”:“^2.2.0”,
“向上插入批量”:“^1.0.2”,
“数据库验证”:“^4.2.0”,
“反应”:“16.11.0”,
“反应本机”:“0.62.2”,
测试命令 配置 .rc.json

{
“testRunner”:“玩笑”,
“runnerConfig”:“e2e/config.json”,
“应用程序”:{
“ios”:{
“类型”:“ios.app”,
“binaryPath”:“ios/build/build/Products/Debug iphonesimulator/hooli.app”,
“build”:“xcodebuild-workspace appName.xcworkspace/-scheme-appScheme-configuration Debug-sdk iphonesimulator-derivedDataPath ios/build”
},
“安卓”:{
“类型”:“android.apk”,
“二进制路径”:“指定应用程序二进制的路径”
}
},
“设备”:{
“模拟器”:{
“类型”:“ios.simulator”,
“设备”:{
“类型”:“iPhone 11”
}
},
“仿真器”:{
“类型”:“android.emulator”,
“设备”:{
“avdName”:“Pixel_3a_API_30_x86”
}
}
},
“配置”:{
“ios”:{
“设备”:“模拟器”,
“应用程序”:“ios”
},
“安卓”:{
“设备”:“仿真器”,
“应用程序”:“android”
}
}
}
e2e/config.json

{
“测试环境”:“/environment”,
“测试跑步者”:“开玩笑的马戏团/跑步者”,
“测试超时”:35000,
“testRegex”:“\\\.e2e\\.js$”,
“记者”:[“排毒/跑步者/玩笑/流线记者”],
“详细”:正确
}
e2e/environment.js

const{
改善环境,,
特约记者:,
记者:,
}=要求(“戒毒/跑步/开玩笑马戏团”);
类customDetoxitEnvironment扩展了该环境{
构造函数(配置,上下文){
超级(配置,上下文);
//如果您满足于默认值(=30000ms),则可以安全地删除
this.initTimeout=300000;
//这负责按规范生成状态日志。默认情况下,Jest仅在文件级报告。
//这是严格可选的。
这是registerListeners({
特约记者:,
记者:,
});
}
}
module.exports=定制环境;
遗言 我们试过打电话

device.disableSynchronization();
...
device.enableSynchronization();
以及设置黑名单

//这个
device.launchApp({
启动参数:{URLblacklistregex:'.''},
});
//还是这个
device.setURLBlacklist(['.']);
但这一切似乎都不管用

有没有办法让Detox忽略PockDB网络请求,或者手动暂停PockDB,这样我们就可以做出下一个断言

作者在这里,每当我们在测试环境中时,我都可以通过将这个配置值切换为false来手动暂停PockDB的实时同步。来源:

//localDB、authDB已使用新的PockDB(…)初始化
//isTestEnv=true
localDB.sync(authDB{
现场:(isTestEnv)?假:真,
//其他选择
});
在这一改变之后,排毒测试能够超越登录步骤,并在应用程序中做出更多断言!感觉不舒服,但至少它又开始工作了

`detox test -c ios -l verbose --record-logs all`