【问题标题】:Override pipe when testing component测试组件时覆盖管道
【发布时间】:2017-11-16 13:04:16
【问题描述】:

我正在尝试对使用自定义管道的组件进行单元测试。我想为我的测试提供transform 方法的假实现。

我发现override组件、模块、管道等是可能的,但是我看不出如何覆盖组件的行为(实现)。

我尝试为我提供自定义类作为管道的替代品,但它不起作用:

TestBed
  .configureTestingModule({declarations: [MyPipe]})
  .overridePipe(MDatePipe, {set: MyFakePipe})

我在 SO How to mock Pipe when testing Component 上发现了类似的问题,但建议的解决方案是创建完整的新管道并将其提供给测试模块的 declarations,这在我看来有点太多了。

如果overridePipe 不允许我覆盖transform 实现,是否可以获得创建的MyPipe 类和spyOn 的实例?

var pipe = TestBed.get(MyPipe);

也没有用。

【问题讨论】:

    标签: javascript angular unit-testing


    【解决方案1】:

    我还没有找到一种方法来覆盖 Pipe 的行为,所以我最终为真正的 Pipe 提供了虚假服务,以便我可以模拟它的行为。

    替代解决方案是为测试创建假管道实现,如回答问题 How to mock Pipe when testing Component 中所建议的那样。

    【讨论】:

    • 还有什么想法吗? =)
    • @SharikovVladislav,我基本上就是这样做的。我的管道使用服务,我伪造服务来定义管道的行为。我研究期间的替代解决方案是在测试中创建一个假管道并使用相同的名称注册它。这也可能运作良好,但需要更多的工作。
    • 我试过这个:Alternative solution during my research was to create a fake pipe in the test and register it with the same name。那是行不通的。
    • 这是我尝试过的:github.com/sharikovvladislav/ng2-diary-book/pull/41/commits/…。在这里您可以找到红色 CI 版本:circleci.com/gh/sharikovvladislav/ng2-diary-book/…。我的时区仍然错误。
    • 我还尝试模拟整个组件并使用overrideComponent 方法。我明白了:我可以更改内部角度 DatePipe 的元数据。我可以更改名称,也可以加载我自己的 FakeDatePipe。也许这会奏效。我稍后会尝试。
    猜你喜欢
    • 2019-06-30
    • 1970-01-01
    • 2017-01-10
    • 2021-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多