我曾经能够使用ddescribe和iit让jasmine/karma运行一个特定的测试或一组测试.但是,现在它不再有效了,我得到了这个错误:(或类似的iit).
INFO [karma]: Karma v0.12.31 server started at http://localhost:8081/
INFO [launcher]: Starting browser PhantomJS
INFO [PhantomJS 1.9.8 (Windows 7)]: Connected on socket jIMgciNEN5VXBdZOhDz2 with id 78471739
PhantomJS 1.9.8 (Windows 7) ERROR
ReferenceError: Can't find variable: ddescribe
at /.../test.js:146
Run Code Online (Sandbox Code Playgroud)
我正在奔跑:karma 0.12.28,茉莉2.2.0,karma-jasmine:0.3.5,karma-phantomjs-launcher:0.1.4
以下是测试文件的基本外观:
'use strict';
ddescribe('MyController', function() {
it('should do xyz', function() {
...
});
});
Run Code Online (Sandbox Code Playgroud)
有什么想法吗?是否有一些我错过的定义或配置更改,以便现在不再定义ddescribe?
我想创建一个自定义序列化程序,它可以完成一些工作,然后将其余部分用于默认序列化.
例如:
@JsonSerialize(using = MyClassSerializer.class)
public class MyClass {
...
}
public class MyClassSerializer extends JsonSerializer<MyClass> {
@Override
public void serialize(MyClass myClass, JsonGenerator generator,
SerializerProvider provider)
throws JsonGenerationException, IOException {
if (myClass.getSomeProperty() == someCalculationResult) {
provider.setAttribute("special", true);
}
generator.writeObject(myClass);
}
}
Run Code Online (Sandbox Code Playgroud)
有了为聚合对象创建其他自定义序列化程序的想法,这些序列化程序根据'speical'属性值表现不同.但是,上面的代码不起作用,因为毫无疑问会进入无限递归.
有没有办法告诉杰克逊在设置属性后使用默认序列化?我真的不想枚举像许多自定义序列化程序一样的所有属性,因为类相当复杂,我不想每次更改类时都要对序列化程序进行双重维护.
我有一个带有可选查询参数的状态.我认为它工作正常,但我发现,一旦我指定了可选参数,它就会从那一点开始保留,因为我导航到与其他参数相同的状态,除非显式删除了可选参数.
有没有办法确保在状态更改之间删除可选参数?
这是我想要改变状态的一个例子(测试a和测试b),但事实证明我必须使用'test d'版本,因为如果先前已经使用了可选参数的保留.
<a ui-sref="test({req: 'a'})">test a</a><br/>
<a ui-sref="test({req: 'b'})">test b</a><br/>
<a ui-sref="test({req: 'c', opt: 'here'})">test c and opt</a><br/>
<a ui-sref="test({req: 'd', opt: undefined})">test d and explicity without opt</a>
Run Code Online (Sandbox Code Playgroud)
这与我的状态配置类似:
$stateProvider.state('test', {
url: '/{req}?opt',
params: {
opt: {value: null, squash: true}
},
template: '<h1>req = {{req}}</h1>' +
'<h1>opt = {{opt}}</h1>',
controller: function($scope, $stateParams) {
$scope.req = $stateParams.req;
$scope.opt = $stateParams.opt;
}
})
Run Code Online (Sandbox Code Playgroud)
这是一个jsfiddle.单击前两个链接,它按预期工作,但是一旦单击第三个链接,然后单击前两个链接中的任何一个,您将看到保留可选参数,即使它在前两个链接.
我宁愿不必显式重置可选参数,并让它实际工作,如果它是可选的.
有任何想法吗?这是它的设计工作方式吗?如果是这样,有没有办法让它以我想要的方式工作?或者我发现了一个错误?
更新
似乎保留可选参数是基于下面的答案之一"按设计".但是,如果可能的话,我仍然在寻找一种有效的解决方法.我从我的应用程序中的很多地方过渡到状态,其中99%没有指定可选参数.我宁愿不必修改所有这些转换并让它们知道可选参数,而只是指定可选参数1%我需要它的时间.
我试图创建两个状态"test"和一个子"test.opt",然后正常转换为"test"(即'test a'和'test b'),并且只转换为"test.opt"当我指定可选参数时.但是,我有一个休息调用的决心,它需要知道是否设置了opt参数,因此无法解决,因为解析无法从子节点访问'opt'.
更新#2
我也尝试复制'test'状态,名为'testopt',在这种情况下,唯一的区别是?opt参数.但是,显然ui-router无法区分仅由查询参数不同的两个url,因此即使opt param是url的一部分,它仍然会尝试转换为'test'.
我问这个问题类似的问题:UI路由器条件ui视图?,但我的情况有点复杂,我似乎无法得到所提供的工作答案.
基本上,我有一个可以呈现两种截然不同的方式的URL,具体取决于url指向的实体类型.
这是我目前正在尝试的
$stateProvider
.state('home', {
url : '/{id}',
resolve: {
entity: function($stateParams, RestService) {
return RestService.getEntity($stateParams.id);
}
},
template: 'Home Template <ui-view></ui-view>',
onEnter: function($state, entity) {
if (entity.Type == 'first') {
$state.transitionTo('home.first');
} else {
$state.transitionTo('home.second');
}
}
})
.state('home.first', {
url: '',
templateUrl: 'first.html',
controller: 'FirstController'
})
.state('home.second', {
url: '',
templateUrl: 'second.html',
controller: 'SecondController'
});
Run Code Online (Sandbox Code Playgroud)
我设置了Resolve来从一个宁静的服务中获取实际的实体.似乎每件事情都有效,直到我真正根据类型进入transitionTo.
过渡似乎有效,除了重新触发,getEntity因为id为null而失败.
我已经尝试将id发送到transitionTo调用,但是它仍然尝试进行第二次解析,这意味着实体从其余服务中获取两次.
似乎正在发生的事情是,在onEnter处理程序中,状态实际上还没有改变,所以当转换发生时,它认为它正在转换到一个全新的状态而不是一个子状态.这进一步证明了,因为我删除了实体.从transitionTo中的州名,它认为当前的状态是root,而不是home.这也阻止我使用'go'而不是transitionTo.
有任何想法吗?
我试图根据来自父级的信息有条件地序列化子bean。
public class Parent {
private boolean isSecure;
private Child child;
}
public class Child {
String someValue;
}
Run Code Online (Sandbox Code Playgroud)
基本上,如果the parent.isSecure()
为true,那么我想someValue
比if parent.isSecure()
为false 进行序列化。
我的实际类比这个简单的示例要复杂得多,所以我真的不想为此创建一个完整的自定义序列化程序Parent
,除非需要向我展示如何Parent
在不使用该序列化自定义序列化程序的情况下利用标准序列化,否则我将需要对其进行单独维护。必须遍历所有属性并处理JSON批注,视图等。如果可以,那可能行得通,因为我可以根据来设置上下文属性isSecure()
。
我不介意为孩子编写自定义序列化程序,但是我不知道如何从父级检查值。
我考虑过使用“安全”视图和“不安全”视图,我可以在整个序列化过程中指定该视图,但随后我将不得不遍历并注释父类的许多属性,以使其同时处于“安全”状态和“不安全”视图(DEFAULT_VIEW_INCLUSION
由于许多我不想序列化的属性,我已经关闭了该选项)。
我尝试generator.getCurrentValue()
在自定义的Child序列化程序中进行访问,但是它始终为null,因此不确定该如何工作。
我已经考虑过为编写自定义序列化程序isSecure
,并在其中设置上下文属性,但是如何确定在为孩子定制自定义序列化程序之前将其调用?(尽管我承认我不确定上下文属性是否真的像我假设的那样工作。)
有任何想法吗?
当我进行咕噜声构建时,我的凉亭刚刚开始出错.特别是,我看到的错误如下:
Warning: Request to https://bower.herokuapp.com/packages/angular failed with 502 Use --force to continue.
Run Code Online (Sandbox Code Playgroud)
做一些研究,看起来注册表服务器已从bower.herokuapp.com更改为registry.bower.io.但是,我的凉亭仍在击中旧服务器.
我的凉亭更新到最新版本:1.8.4.我已经清除了我的凉亭缓存,以防万一.
不知道下一步该怎么做.
更新:
我能够在我的.bowerrc文件中本地指定注册表,但我仍然想知道如何让它在默认情况下命中新的注册表.
{
"directory": "app/bower_components",
"registry": {
"search": [
"https://registry.bower.io"
]
}
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试将 Spring Data Mongo 与事务一起使用。我最初遇到了一个问题,即由于 Spring 在第一次插入文档期间尝试创建集合和/或索引,我的插入会失败。从那以后,我通过在任何事务开始之前在启动时创建我的所有集合和索引来解决这个问题。不过,我还是使用Spring数据注解来定义索引(即@Indexed
,@CompoundIndexes
等)。但是,即使我已经创建了所有索引,Spring 仍在尝试在 mongo 处理期间确保/创建索引。
在我的情况下,我对我的数据类型使用继承。即,BasicUnit
其他单位的扩展。如果我去存储特定类型的 Unit,并且这是我在当前应用程序运行期间第一次尝试保存该类型的对象,则 Spring 无法识别它,并PersistentEntity
为它创建一个新对象。作为创建 new 的一部分PersistentEntity
,Spring 会发布一个事件,该事件会MongoPersistentEntityIndexCreator
捕获并尝试确保创建所有索引,因此会引发异常。
这是例外:
Caused by: com.mongodb.MongoCommandException: Command failed with error 263 (OperationNotSupportedInTransaction): 'It is illegal to run command createIndexes in a multi-document transaction.' on server 127.0.0.1:27017. The full response is { "operationTime" : { "$timestamp" : { "t" : 1560198052, "i" : 1 } }, "ok" : 0.0, "errmsg" : "It is illegal …
Run Code Online (Sandbox Code Playgroud) 我想在<head>
页面中进行ng-repeat 以枚举开放图形元标记.但是,我不确定如何完成,因为似乎允许<head>
的标签包含标签.
如果我只是<div>
像我经常使用ng-repeat那样添加一个包装器,那么浏览器会将其从<head>
下降到下方<body>
.
我考虑创建自己的do-nothing指令,允许我做这样的事情
<custom-repeat-wrapper ng-repeat="entry in entries">
<meta property="entry.key" content="entry.content"/>
</custom-repeat-wrapper>
Run Code Online (Sandbox Code Playgroud)
我认为这样可行,但据我所知,浏览器可能会将其降低<body>
.
我想我可以编写自己的指令,sorta的工作方式与ng-repeat类似,但不需要包装器,而是复制它所放置的标签.
在我走这条路之前,任何人都有任何其他建议来寻求更清洁的解决方案?
更新 11/15/2021
看起来这可能已经被报告了,而且修复程序还没有发布。 https://bugs.eclipse.org/bugs/show_bug.cgi?id=575897
如果有人有解决方法,我们仍然会感激不已。
我现在可以在不同的编辑器中编辑文件,但这是一个很大的痛苦。
原问题
无法在STS 4.12.1.RELEASE中打开aspectj文件(*.aj)
每当我尝试打开 .aj 文件时,Eclipse 都会给出错误“编辑器无法初始化”并引发以下异常。
此外,如果我只需单击包资源管理器中的 .aj 文件,就会出现一个弹出窗口,显示“发生问题”和“发生错误。有关更多详细信息,请参阅错误日志”。和同样的例外。日志仅包含相同的异常。
它似乎与 equinox 有关,因此我尝试从 STS 4 中卸载 Equinox,但无法卸载全部(显然是由于其他插件依赖于它),并且错误仍然存在。
我使用的是“开箱即用”的 STS 4,仅进行了以下额外修改:
我的 maven 项目依赖于 AspectJ 1.9.7 和 maven-aspectj-plugin 1.14.0,并且我正在运行 JDK 11。
java.lang.IllegalAccessError: class org.eclipse.ajdt.core.javaelements.AJCompilationUnit tried to access private field org.eclipse.jdt.internal.core.JavaElement.parent (org.eclipse.ajdt.core.javaelements.AJCompilationUnit is in unnamed module of loader org.eclipse.osgi.internal.loader.EquinoxClassLoader @71dac63f; org.eclipse.jdt.internal.core.JavaElement is in unnamed module of loader org.eclipse.osgi.internal.loader.EquinoxClassLoader @629dfb5a)
at org.eclipse.ajdt.core.javaelements.AJCompilationUnit.ajCloneCachingContents(AJCompilationUnit.java:1066)
at org.eclipse.ajdt.core.javaelements.AJCompilationUnit.buildStructure(AJCompilationUnit.java:357)
at org.eclipse.jdt.internal.core.Openable.generateInfos(Openable.java:266)
at org.eclipse.ajdt.core.javaelements.AJCompilationUnit.generateInfos(AJCompilationUnit.java:231)
at org.eclipse.jdt.internal.core.JavaElement.openWhenClosed(JavaElement.java:597) …
Run Code Online (Sandbox Code Playgroud) angularjs ×3
jackson ×2
java ×2
javascript ×2
json ×2
ajdt ×1
angular-ui ×1
aspectj ×1
bower ×1
eclipse ×1
equinox ×1
jasmine ×1
karma-runner ×1
mongodb ×1
sts ×1