【问题标题】:How to set a private field filled by constructor in test?如何在测试中设置由构造函数填充的私有字段?
【发布时间】:2017-03-02 09:55:58
【问题描述】:

我有一个简单的组件,它应该根据当前日期预先选择一个值:

export class VorgangComponent implements OnInit {
    private _date: Moment;

    constructor() {
        this._date = utc();
    }

    ngOnInit() {
        this.preselectOption();
    }

没有真正的火箭科学。
我想知道如何测试这个类。脑海中浮现出不同的想法,但我不知道推荐的方式:

  • 约会服务(对我来说似乎有点矫枉过正)
  • 受保护的成员并使用类继承进行测试
  • 受保护的方法并使用类继承进行测试

我错过了什么吗?有什么办法可以用茉莉花吗?

【问题讨论】:

  • 你可以用例如来自 sinonjs 的lolex 伪造时间

标签: unit-testing angular typescript jasmine


【解决方案1】:

我错过了什么吗?

privatepublic 在 Javascript 中不存在,仅用于编译时检查。在运行时,它是完全可访问的。所以你可以只使用字符串访问器component['_date']。唯一不好的是你失去了对返回值的任何智能感知和编译时检查

或者您可以忘记 private 关键字。风格方面,_ 已经暗示私有(可能不是编译方面)。但即使在 Angular 源代码中,他们也不使用private。他们只使用_。我猜这是风格问题。不确定 Angular 选择这种风格背后的原因,但就我个人而言,这也是我刚刚开始使用的东西。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-09
    • 1970-01-01
    • 1970-01-01
    • 2011-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-28
    相关资源
    最近更新 更多