首页 > 解决方案 > 茉莉角 4 单元测试 router.url

问题描述

我正在使用 jasmine 对 angular 4 项目中的一个函数进行单元测试,该 switch 语句如下所述:

    switch(this.router.url) {

    case 'firstpath': {
               // some code
            }
        break;
    case 'secondpath': {
               // some more code
            }
       break;
    default:
        break;

    }

在我的 spec.ts 文件中。我无法存根或更改 router.url 的值。我希望我的案例执行,但默认正在执行。我尝试了不同的方法来设置或 spyOn 和返回值,但每次 url 都是'/'。每个建议或解决方案都将受到欢迎。

标签: angularunit-testingkarma-jasminerouter

解决方案


首先,您需要在测试模块中模拟路由器:

TestBed.configureTestingModule({
  ...
  providers: [
    {
       provide: Router,
       useValue: {
          url: '/path'
       } // you could use also jasmine.createSpyObj() for methods
    } 
  ]
});

您还可以更改测试中的 url 并运行您测试的方法:

const router = TestBed.inject(Router);
// @ts-ignore: force this private property value for testing.
router.url = '/path/to/anything';
// now you can run your tested method:
component.testedFunction();

正如您提到的那样spyOn不起作用,因为它仅适用于方法/功能。而是url一种属性。


推荐阅读