Angular 测试:模拟常量的值
Angular testing: mock the value of a constant
我有一个简单的应用程序:
- AppComponent 从服务中获取要显示的活动列表
- ActivitiesService 从导入的 constant
获取列表
- 在我的测试文件中 activities.service.spec.ts 我想 模拟那个常量
为方便起见,我设置了 '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"
}
];
我有一个简单的应用程序:
- AppComponent 从服务中获取要显示的活动列表
- ActivitiesService 从导入的 constant 获取列表
- 在我的测试文件中 activities.service.spec.ts 我想 模拟那个常量
为方便起见,我设置了 '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"
}
];