我有一个名为
items
的服务,这是 spec
文件:
import { TestBed } from '@angular/core/testing';
import { ItemsService } from './items.service';
describe('ItemsListService', () => {
let service: ItemsService;
beforeEach(() => {
TestBed.configureTestingModule({});
service = TestBed.inject(ItemsService);
});
it('should be created', () => {
expect(service).toBeTruthy();
});
it('should insert new item', () => {
const item = {
id: '123',
name: 'item',
baseUnit: 'unit',
brand: 'brand',
price: 100,
quantity: 10,
supplier: 'supplier',
cost: 50,
imageUrl: 'url',
};
service.insertItem(item);
const items = service.getItems();
expect(items.length).toBeGreaterThan(0);
expect(items).toContain(item);
});
});
这是另一个名为
orders
的服务,它依赖于 items
服务从存储的商品创建订单。
import { TestBed } from '@angular/core/testing';
import { OrdersService } from './orders.service';
describe('OrdersService', () => {
let service: OrdersService;
beforeEach(() => {
TestBed.configureTestingModule({});
service = TestBed.inject(OrdersService);
});
it('should be created', () => {
expect(service).toBeTruthy();
});
it('should insert new order', async () => {
const newOrder = await service.insertOrder(itemsService.getItems()[0]);
});
});
因此,为了让
orders
服务创建新订单,它需要访问存储在 items
服务中的项目service.insertOrder(itemsService.getItems()[0])
。
如何访问在
items
文件中创建的 spec
服务的同一实例?
您希望在 OrdersService Spec 中重用 ItemsService 的同一实例,该实例已从 ItemsService Spec 添加了项目,而无需在 OrdersService Spec 中再次添加项目。
要实现此目标,您需要确保 OrdersService Spec 中的 ItemsService 反映 ItemsService Spec 文件中的 ItemsService 的状态(其中已添加项目)。
由于 TestBed 默认情况下为每个规范创建一个新的服务实例,因此您无法直接在不同的规范文件之间共享该实例,除非您 将设置合并到同一个测试套件中 按顺序运行测试。
import { TestBed } from '@angular/core/testing';
import { OrdersService } from './orders.service.ts';
import { ItemsService } from './items.service.ts';
let ordersService: OrdersService;
let itemsService: ItemsService;
beforeEach(() => {
TestBed.configureTestingModule({
providers: [OrdersService, ItemsService]
})
ordersService = TestBed.inject(OrdersService);
itemsService = TestBed.inject(ItemsService);
const item = {...your object...}
itemsService.insertItem(item);
})
it('should insert new order using existing item from ItemsService', async () => {
const newOrder = await ordersService.insertOrder(itemsService.getItems()[0])
-- rest of your test case code --
})
})