svelte-phaser
Version:
Create Phaser 3 games with Svelte 3
114 lines • 4.91 kB
JavaScript
import { render } from '@testing-library/svelte';
import { tick, getContext } from 'svelte';
import Camera from './Camera.svelte';
import { createGame, asMock } from './test-utils';
import { findGameObjectsByName } from './util/findGameObjectsByName';
jest.mock('svelte', () => (Object.assign(Object.assign({}, jest.requireActual('svelte')), { getContext: jest.fn() })));
jest.mock('./util/findGameObjectsByName');
const baseProps = {
x: 0,
y: 0,
width: 100,
height: 100,
bounds: { x: 0, y: 0, width: 512, height: 256 },
};
let scene;
beforeAll(async () => {
const setup = await createGame();
scene = setup.scene;
asMock(getContext).mockImplementation((name) => {
switch (name) {
case 'phaser/scene':
return scene;
case 'phaser/game':
return setup.game;
}
});
});
test('bounds props', async () => {
const { component: { instance, $$set }, } = render(Camera, Object.assign({}, baseProps));
jest.spyOn(instance, 'setBounds');
$$set({ bounds: { x: 100, y: 0, width: 512, height: 256, centerOn: true } });
await tick();
expect(instance.setBounds).toHaveBeenCalledWith(100, 0, 512, 256, true);
});
test('effects props', async () => {
const { component: { instance }, } = render(Camera, Object.assign(Object.assign({}, baseProps), { fadeEffect: 1, flashEffect: 2, panEffect: 3, shakeEffect: 4, zoomEffect: 5 }));
expect(instance.fadeEffect).toEqual(1);
expect(instance.flashEffect).toEqual(2);
expect(instance.panEffect).toEqual(3);
expect(instance.shakeEffect).toEqual(4);
expect(instance.zoomEffect).toEqual(5);
});
describe('follow', () => {
test('follow with object reference', async () => {
const target = { something: 'something' };
const { component: { instance, $$set }, } = render(Camera, Object.assign({}, baseProps));
jest.spyOn(instance, 'startFollow');
$$set({
follow: target,
});
await tick();
expect(instance.startFollow).toHaveBeenCalledWith(target, undefined, undefined, undefined, undefined, undefined);
});
test('follow with all parameters', async () => {
const target = { something: 'something' };
// @ts-ignore
asMock(findGameObjectsByName).mockImplementation(() => [target]);
const { component: { instance, $$set }, } = render(Camera, Object.assign({}, baseProps));
jest.spyOn(instance, 'startFollow');
$$set({
follow: 'something',
roundPixels: true,
lerp: {
x: 1,
y: 2,
},
followOffsetX: 5,
followOffsetY: 6,
});
await tick();
expect(instance.startFollow).toHaveBeenCalledWith(target, true, 1, 2, 5, 6);
});
test('follow with string reference', async () => {
const target = { something: 'something' };
// @ts-ignore
asMock(findGameObjectsByName).mockImplementation(() => [target]);
const { component: { instance, $$set }, } = render(Camera, Object.assign({}, baseProps));
jest.spyOn(instance, 'startFollow');
$$set({
follow: 'something',
});
await tick();
expect(instance.startFollow).toHaveBeenCalledWith(target, undefined, undefined, undefined, undefined, undefined);
});
test('follow offset', async () => {
const { component: { instance }, } = render(Camera, Object.assign(Object.assign({}, baseProps), { followOffsetX: 1, followOffsetY: 2 }));
expect(instance.followOffset.x).toEqual(1);
expect(instance.followOffset.y).toEqual(2);
});
});
test('makeMain', async () => {
jest.spyOn(scene.cameras, 'addExisting');
const { component: { instance }, } = render(Camera, Object.assign(Object.assign({}, baseProps), { makeMain: true }));
expect(scene.cameras.addExisting).toHaveBeenCalledWith(instance, true);
});
test('roundPixels', async () => {
const { component: { instance }, } = render(Camera, Object.assign(Object.assign({}, baseProps), { roundPixels: true }));
expect(instance.roundPixels).toEqual(true);
});
test('width/height', async () => {
const { component: { instance }, } = render(Camera, Object.assign(Object.assign({}, baseProps), { width: 10, height: 10 }));
expect(instance.width).toEqual(10);
expect(instance.height).toEqual(10);
});
test('zoom', async () => {
const { component: { instance }, } = render(Camera, Object.assign(Object.assign({}, baseProps), { zoom: 0.5 }));
expect(instance.zoom).toEqual(0.5);
});
test('zoom x/y', async () => {
const { component: { instance }, } = render(Camera, Object.assign(Object.assign({}, baseProps), { zoomX: 0.5, zoomY: 0.75 }));
expect(instance.zoomX).toEqual(0.5);
expect(instance.zoomY).toEqual(0.75);
});
//# sourceMappingURL=Camera.spec.js.map