用途
Jasmine 测试技能用于在 JavaScript 项目中生成 Jasmine 测试代码。Jasmine 是一个 BDD(行为驱动开发)风格的测试框架,内置 spy(间谍函数)与异步测试支持。当用户提到“Jasmine”“jasmine.createSpy”等关键词时,可使用该技能生成对应的测试。
主要能力
基础测试结构
使用 describe 组织测试套件,beforeEach 做前置准备,it 定义单个测试用例。示例:
describe('Calculator', () => {
let calc;
beforeEach(() => { calc = new Calculator(); });
it('should add two numbers', () => {
expect(calc.add(2, 3)).toBe(5);
});
it('should throw on divide by zero', () => {
expect(() => calc.divide(10, 0)).toThrowError('Division by zero');
});
});
匹配器(Matchers)
技能涵盖常用匹配器,包括严格相等、深度相等、真值判断、数值比较、字符串与数组包含、正则匹配、异常断言以及取反(not):
expect(value).toBe(exact); // === strict
expect(value).toEqual(object); // Deep equality
expect(value).toBeTruthy();
expect(value).toBeFalsy();
expect(value).toBeNull();
expect(value).toBeUndefined();
expect(value).toBeDefined();
expect(value).toBeNaN();
expect(value).toBeGreaterThan(3);
expect(value).toBeCloseTo(0.3, 5);
expect(str).toContain('sub');
expect(str).toMatch(/pattern/);
expect(arr).toContain(item);
expect(fn).toThrow();
expect(fn).toThrowError('message');
// Negation
expect(value).not.toBe(other);
Spies(间谍函数)
支持使用 jasmine.createSpyObj 创建带方法的 spy 对象,使用 spyOn 监听已有方法,并可配置返回值、调用原方法或抛出错误,同时可断言调用参数与调用次数:
describe('UserService', () => {
let service, api;
beforeEach(() => {
api = jasmine.createSpyObj('api', ['get', 'post']);
service = new UserService(api);
});
it('fetches user from API', async () => {
api.get.and.returnValue(Promise.resolve({ name: 'Alice' }));
const user = await service.getUser(1);
expect(user.name).toBe('Alice');
expect(api.get).toHaveBeenCalledWith('/users/1');
expect(api.get).toHaveBeenCalledTimes(1);
});
});
// Spy on existing method
spyOn(obj, 'method').and.returnValue(42);
spyOn(obj, 'method').and.callThrough(); // Call original
spyOn(obj, 'method').and.throwError('err');
异步测试
支持 async/await 方式与 done 回调方式,并可通过 jasmine.clock 控制时钟以测试定时逻辑:
it('fetches data', async () => {
const data = await fetchData();
expect(data).toBeDefined();
});
// With done callback
it('fetches data', (done) => {
fetchData().then(data => {
expect(data).toBeDefined();
done();
});
});
// Clock control
beforeEach(() => { jasmine.clock().install(); });
afterEach(() => { jasmine.clock().uninstall(); });
it('handles timeout', () => {
const callback = jasmine.createSpy();
setTimeout(callback, 1000);
jasmine.clock().tick(1001);
expect(callback).toHaveBeenCalled();
});
使用方式
安装:
npm install jasmine --save-dev && npx jasmine init
运行:
npx jasmine
或运行指定测试文件:
npx jasmine spec/calculatorSpec.js
进阶模式
技能提供参考手册 reference/playbook.md,包含生产级模式,按章节组织:
- §1 项目配置:jasmine.json、TypeScript、spec reporter 配置
- §2 Spies 完整 API:spyOn、createSpyObj、callFake、returnValues、调用跟踪
- §3 异步测试:async/await、expectAsync、promise 匹配器
- §4 自定义匹配器:领域专用匹配器、非对称匹配器
- §5 测试组织:嵌套 describe、共享状态、聚焦/排除
- §6 Fetch 与模块 Mock:globalThis.fetch spy、HTTP 错误处理
- §7 浏览器测试:DOM 创建、键盘事件、配合 Karma 的焦点陷阱
- §8 CI/CD 集成:带覆盖率的 GitHub Actions、浏览器测试
- §9 调试表:12 个常见问题及其原因与修复
- §10 最佳实践:14 项生产级 Jasmine 测试检查清单
适用场景
适用于 JavaScript 项目中使用 Jasmine 框架编写单元测试、组件测试与异步逻辑测试的场景,尤其适合需要 spy 行为验证、定时器控制或 BDD 风格组织的测试需求。
限制
关于该技能的具体收费、价格、支持平台、实际效果等信息,资料中暂未提供。