Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/excaliburjs/excalibur-jasmine
Testing utilities for Excalibur in the Jasmine testing framework
https://github.com/excaliburjs/excalibur-jasmine
excalibur excaliburjs jasmine plugin
Last synced: 6 days ago
JSON representation
Testing utilities for Excalibur in the Jasmine testing framework
- Host: GitHub
- URL: https://github.com/excaliburjs/excalibur-jasmine
- Owner: excaliburjs
- Created: 2018-05-20T16:57:00.000Z (over 6 years ago)
- Default Branch: main
- Last Pushed: 2024-10-28T15:30:18.000Z (about 2 months ago)
- Last Synced: 2024-10-30T01:20:32.668Z (about 2 months ago)
- Topics: excalibur, excaliburjs, jasmine, plugin
- Language: TypeScript
- Homepage:
- Size: 745 KB
- Stars: 1
- Watchers: 4
- Forks: 0
- Open Issues: 18
-
Metadata Files:
- Readme: readme.md
Awesome Lists containing this project
README
# Excalibur Jasmine Matchers
[![Build Status](https://travis-ci.org/excaliburjs/excalibur-jasmine.svg?branch=main)](https://travis-ci.org/excaliburjs/excalibur-jasmine)
This library is built to help test excalibur, and games made with excalibur.
These matchers are only supported in a browser context.
## Installation
`npm install excalibur-jasmine --save-dev --save-exact`
In your jasmine test file
```typescript
import { ExcaliburMatchers, ExcaliburAsyncMatchers } from 'excalibur-jasmine';
import * as ex from 'excalibur';describe('A new thingy', () => {
beforeAll(() => {
jasmine.addMatchers(ExcaliburMatchers);
jasmine.addAsyncMatchers(ExcaliburAsyncMatchers);
});
it('should be fast', () => {
...
});
});```
Using image matchers with karma, you will want to add a proxy to smooth over `/base/` this repo is a good example of how to configure it.
```js
proxies: {
// smooths over loading files because karma prepends '/base/' to everything
'/src/' : '/base/src/',
'/test-images/': '/base/test-images/'
},
```## Async Matchers
### New and improved toEqualImage
Now with jasmine async matchers you can remove a lot of the old boilerplate need to match images!
```typescript
import { ExcaliburAsyncMatchers } from 'excalibur-jasmine'
describe('A new thingy', () => {
beforeAll(() => {
jasmine.addAsyncMatchers(ExcaliburAsyncMatchers);
});
it('should match images', async () => {
let engine = new ex.Engine({width: 100, height: 100});
await expectAsync(engine.canvas).toEqualImage('images/expectedcanvas.png', .99);
});
});```
## Matchers
### toEqualImage
For loading images, there is a helper called `ensureImagesLoaded` that will ensure that any image resources are loaded into the test before comparing them.
```typescript
import { ExcaliburMatchers, ExcaliburAsyncMatchers, ensureImagesLoaded } from 'excalibur-jasmine'
import * as ex from 'excalibur';describe('A new thingy', () => {
beforeAll(() => {
jasmine.addMatchers(ExcaliburMatchers);
jasmine.addAsyncMatchers(ExcaliburAsyncMatchers);
});
it('should match images', (done) => {
let engine = new ex.Engine({width: 100, height: 100});
ensureImagesLoaded(engine.canvas, 'images/expectedcanvas.png').then(([canvasImage, expectedImage]) => {
expect(canvasImage).toEqualImage(expectedImage, .99);
done()
})
});
});```
### toBeVector
This matcher is useful for comparing positions or velocities on objects in excalibur
```typescript
import { ExcaliburMatchers, ensureImagesLoaded }
import * as ex from 'excalibur';describe('A new thingy', () => {
beforeAll(() => {
jasmine.addMatchers(ExcaliburMatchers)
});
it('should be at position', () => {
let actor = new ex.Actor({
x: 1,
y: 10
});
expect(actor.pos).toBeVector(new ex.Vector(1, 10));
});
});```
### toHaveValues
This matcher is useful for checking bespoke properties on an actor
```typescript
import { ExcaliburMatchers, ensureImagesLoaded }
import * as ex from 'excalibur';describe('A new thingy', () => {
beforeAll(() => {
jasmine.addMatchers(ExcaliburMatchers)
});
it('should have values', () => {
let actor = new ex.Actor({
x: 1,
y: 10,
collisionType: ex.CollisionType.Fixed,
color: ex.Color.Red
});
expect(actor).toHaveValues({
x: 1,
y: 10,
collisionType: ex.CollisionType.Fixed,
color: ex.Color.Red
});
});
});```