小编maj*_*ibu的帖子

监视 ChangeDetectorRef.detectChanges

我试图测试一个组件调用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)

angular

6
推荐指数
2
解决办法
2217
查看次数

ANTLR语法如何捕获所有字符到行尾

我正在尝试捕获一个看起来像_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"应该是任何非换行符的字符串,所以从播放到行尾之后的第一个非空格.

c# antlr

4
推荐指数
1
解决办法
4002
查看次数

标签 统计

angular ×1

antlr ×1

c# ×1