42 lines
1.1 KiB
TypeScript
42 lines
1.1 KiB
TypeScript
import Database from 'better-sqlite3';
|
|
import { SearchService } from './search.service';
|
|
import { seedDatabase } from '../testing/seed';
|
|
|
|
/** SearchService 单元测试 — 对应 T-1.4 UT。*/
|
|
describe('SearchService', () => {
|
|
let service: SearchService;
|
|
let db: Database.Database;
|
|
|
|
beforeAll(() => {
|
|
db = new Database(':memory:');
|
|
seedDatabase(db);
|
|
service = new SearchService({ db } as any);
|
|
});
|
|
|
|
afterAll(() => db.close());
|
|
|
|
it('空查询返回空结果', () => {
|
|
expect(service.search('').results).toEqual([]);
|
|
});
|
|
|
|
it('按型号命中', () => {
|
|
const res = service.search('CR400');
|
|
expect(res.results.length).toBeGreaterThan(0);
|
|
expect(res.results[0].model_code).toBe('CR400AF');
|
|
});
|
|
|
|
it('按生产商命中', () => {
|
|
const res = service.search('株洲');
|
|
expect(res.results.some((r) => r.model_code === 'HXD1型')).toBe(true);
|
|
});
|
|
|
|
it('精确匹配排在前', () => {
|
|
const res = service.search('CR400AF');
|
|
expect(res.results[0].rank).toBe(0);
|
|
});
|
|
|
|
it('特殊字符不崩溃', () => {
|
|
expect(() => service.search("%_'")).not.toThrow();
|
|
});
|
|
});
|