我正在实施离子应用程序的单元测试,需要检查$ rootScope上没有广播任何事件
expect($rootScope.$broadcast).not.toHaveBeenCalled();
Run Code Online (Sandbox Code Playgroud)
问题是有时会广播$ locationChangeStart和$ locationChangeSuccess事件,这会使我的测试失败.似乎离子v1.3.0触发了以下代码中的那些
// update browser
$rootScope.$watch(function $locationWatch() {
var oldUrl = trimEmptyHash($browser.url());
var newUrl = trimEmptyHash($location.absUrl());
var oldState = $browser.state();
var currentReplace = $location.$$replace;
var urlOrStateChanged = oldUrl !== newUrl ||
($location.$$html5 && $sniffer.history && oldState !== $location.$$state);
if (initializing || urlOrStateChanged) {
initializing = false;
$rootScope.$evalAsync(function() {
var newUrl = $location.absUrl();
var defaultPrevented = $rootScope.$broadcast('$locationChangeStart', newUrl, oldUrl,
$location.$$state, oldState).defaultPrevented;
Run Code Online (Sandbox Code Playgroud)
上面的代码中的"初始化"标志为true,这会触发$ rootScope.$ broadcast.问题 - 为什么会这样?处理这种情况的最佳方法是什么?现在我添加了$ rootScope.$ digest(); 在我的测试中表现出来似乎解决了问题,但我不确定这是否是有效的解决方案
谢谢
我需要为32位(armeabi-v7a和x86)和64位(arm64-v8a和x86_64)平台构建ionic / cordova应用程序。我使用命令构建了四个单独的APK,ionic build android --release并且ionic build android --release --xwalk64bit
一切顺利,除了versionCode(将版本设置为0.0.11)略微偏离-参见下文

问题是x86和x86_64必须具有比ARM apks高的versionCode。这是必需的,因为x86设备能够处理ARM库,但是没有ARM设备能够处理x86库。因此,我们必须保持x86 APK的版本代码高于ARM apk的版本代码,并且正确的APK将进入正确的设备。
问题是版本代码既由build.gradle设置,又由crosswalk mobile-xwalk.gradle修改,这使用上述构建方法给出了错误的版本。我尝试使用config.xml中的android-versionCode参数并将cdvVersionCode设置为build.gradle 来设置versionCode (请参阅http://cordova.apache.org/docs/en/6.x/guide/platforms/android/index。 html#configuring-gradle),但没有运气。
我最终通过手动更改mobile-xwalk.gradle来为64位apk设置正确的versionCode 来解决该问题(如第二个屏幕截图所示)。这似乎不是我的最佳解决方案
问题-是否有更好的方法来解决此问题?
cordova android-gradle-plugin ionic-framework crosswalk-runtime crosswalk