Angular 测试:模拟常量的值

Angular testing: mock the value of a constant

我有一个简单的应用程序:

为方便起见,我设置了 'given/when/then' 形式的 StackBlitz(包括测试)(link) and another one with the classic 'beforeEach/it()' form (link)。他们应该做同样的事情,但有些人比另一种更喜欢一种风格......如果两者中的任何一个是 运行.

我会很高兴

在测试中,我添加了 { provide: ACTIVITIES, useValue: fakeActivities },因为我相信解决方案必须放在某处...但我该如何应用它?显然我不能注射它...

您可以在 getActivities() 上使用 spyOn 方法,如下所示:

import { TestBed } from "@angular/core/testing";
import { ACTIVITIES } from "../data/activities-mock";
import { Activity } from "../models/activity";
import { ActivitiesService } from "./activities.service";
import Spy = jasmine.Spy;
fdescribe("ActivitiesService", () => {
  let serviceUnderTest: ActivitiesService;
  let actualResult: Activity[];

  beforeEach(() => {
    TestBed.configureTestingModule({
      providers: [
        ActivitiesService
      ]
    });
    serviceUnderTest = TestBed.inject(ActivitiesService);
  });

  it("should get Activities", () => {
    spyOn(serviceUnderTest, 'getActivities').and.returnValue(fakeActivities);
    actualResult = serviceUnderTest.getActivities();
    expect(actualResult).toEqual(fakeActivities);
  });
});

const fakeActivities: Activity[] = [
  {
    id: 1,
    name: "stretching"
  },
  {
    id: 2,
    name: "climbing"
  }
];