我试图测试一个组件调用detectChanges它被注入ChangeDetectorRef
我已经逐步完成了代码,它确实被调用了,但看起来我在组件和测试中获得了不同的 ChangeDetectorRef 值。这是代码。我也试过注释掉的间谍,但它也不起作用。
it('should call ChangeDetectorRef.detectChanges from onFixedUpdate', () => {
let changeDetectorService = fixture.debugElement.injector.get(ChangeDetectorRef, null);
let spy = spyOn(changeDetectorService, 'detectChanges').and.callThrough();
//let spy = spyOn(fixture.changeDetectorRef, 'detectChanges').and.callThrough();
expect(spy).not.toHaveBeenCalled();
fixture.componentInstance.onFixedUpdate(1);
expect(spy).toHaveBeenCalled();
});
Run Code Online (Sandbox Code Playgroud) 我正在尝试捕获一个看起来像_SC弹奏钢琴1的命令到一个有3个节点的树"_SC""play"和"Piano 1"
我到目前为止的语法是
grammar PBScript;
options {
output = AST;
language = CSharp2;
}
line : COMMAND WS ACTION;
COMMAND : '_SC';
ACTION : 'play';
WS : (' '|'\t')+ ;
Run Code Online (Sandbox Code Playgroud)
当我创建另一个规则以捕获"钢琴1"部分时,如下所示:
grammar PBScript;
options {
output = AST;
language = CSharp2;
}
line : COMMAND WS ACTION WS PARAMETER;
COMMAND : '_SC';
ACTION : 'play';
WS : (' '|'\t')+;
PARAMETER
: (~('\n'|'\r'))+ ;
Run Code Online (Sandbox Code Playgroud)
我得到一个MismatchedTokenException(6!= 5).我知道语法是错的,我知道为什么它是错的.这是不明确的,因为WS与PARAMETER重叠.我只是不知道如何解决它.
除了_SC和PARAMETER之外还有其他的动作应该是可选的,甚至会有一个不同的线型最终看起来像Name: blah blah blah我在树中至少需要"名字"和"等等等等",以防万一重要但是对现在我只想弄清楚PARAMETER的用途.
〜汤姆
编辑:字符串"钢琴1"应该是任何非换行符的字符串,所以从播放到行尾之后的第一个非空格.