SuperAPI AI 工具集

jasmine-skill

测试与质量

查看项目

更新于 10-15 14:31

技能介绍

用途

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 风格组织的测试需求。

限制

关于该技能的具体收费、价格、支持平台、实际效果等信息,资料中暂未提供。