mcpField
J
jasmine-skill

jasmine-skill

github.com/lambdatestTesting & quality384230 installsUpdated 2w ago
Repository

About jasmine-skill

jasmine-skill is a testing reference for JavaScript developers using Jasmine. It covers core test patterns and a playbook of setup, mocking, browser testing, CI/CD, and debugging guidance.

Key features

  1. 01Basic specs and matchers
  2. 02Spies and asynchronous tests
  3. 03Setup and run commands
  4. 04Advanced patterns playbook
  5. 05Browser testing and CI/CD guidance

Use cases

  1. 01Writing Jasmine specs for JavaScript code
  2. 02Testing asynchronous functions and spies
  3. 03Configuring browser tests and CI workflows

Install

Copy the command and run it in a terminal.

$npx skills add https://github.com/lambdatest/agent-skills --skill jasmine-skill

After installing, type/jasmine-skillin Claude Code to confirm it loaded.

Bundled filesreference/advanced-patterns.mdreference/playbook.md

Details

From the project README

Jasmine Testing Skill

Core Patterns

Basic Test
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
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
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 Testing
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();
});

Setup: npm install jasmine --save-dev && npx jasmine init

Run: npx jasmine or npx jasmine spec/calculatorSpec.js

Deep Patterns

See reference/playbook.md for production-grade patterns:

SectionWhat You Get
§1 Project Setupjasmine.json, TypeScript, spec reporter config
§2 Spies — Complete APIspyOn, createSpyObj, callFake, returnValues, call tracking
§3 Async Testingasync/await, expectAsync, promise matchers
§4 Custom MatchersDomain-specific matchers, asymmetric matchers
§5 Test OrganizationNested describe, shared state, focused/excluded
§6 Fetch & Module MockingglobalThis.fetch spy, HTTP error handling
§7 Browser TestingDOM creation, keyboard events, focus trapping with Karma
§8 CI/CD IntegrationGitHub Actions with coverage, browser testing
§9 Debugging Table12 common problems with causes and fixes
§10 Best Practices14-item checklist for production Jasmine testing

Comments

Markdown supported