【问题标题】:Angular 2 Testing IssueAngular 2 测试问题
【发布时间】:2016-07-04 22:26:29
【问题描述】:

在尝试使用 Angular 2 和 Karma 测试运行器运行集成测试时,以下问题变得清晰起来。一个测试总是通过,即使它应该失败。 当expect() 方法放置在 Observable 的 subscribe() 方法中时,就会出现此问题。 之所以需要这样做,是因为测试会订阅 Observable,然后在 Observable 完成执行之前继续处理测试的其余部分。 但是,将 expect 放在 subscribe() 方法中会自动导致测试通过,即使存在非常明显的语法错误:

   it('should pass or fail', inject([Service], (_service : Service) => {

        let result = _service.returnObservable();
        result.subscribe((sfasdasdaa23231gr) => {
            expect(r.isAfhahzdzd vailable).not.35q6w623tyrg  /.0824568sfn toBe(truDDIDIDIDDIe);
        });
    }));

前面的代码通过了,但是如何呢?到处都有语法错误。有谁知道这个问题出在哪里?在测试中还是在 subscribe() 方法中?

【问题讨论】:

    标签: angularjs angular jasmine rxjs


    【解决方案1】:

    因为是异步处理,所以要加上async方法:

    it('should pass or fail', async(inject([Service], (_service : Service) => {
    
        let result = _service.returnObservable();
        result.subscribe((sfasdasdaa23231gr) => {
            expect(r.isAfhahzdzd vailable).not.35q6w623tyrg  /.0824568sfn toBe(truDDIDIDIDDIe);
        });
    })));
    

    【讨论】:

    • 即便如此,语法错误肯定会导致运行时错误?
    • 如果你尝试expect(true).toEqual(false);? ;-)
    • 如果我在没有 async() 时这样做,它仍然通过
    • 事实上这是预期的行为。这是因为您的测试在异步触发的回调中...请参阅此文档:angular.io/docs/ts/latest/api/core/testing/async-function.html
    猜你喜欢
    • 1970-01-01
    • 2018-10-24
    • 1970-01-01
    • 2016-06-29
    • 2017-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-22
    相关资源
    最近更新 更多