Внутренние функции Jasmine BeforeAll вызываются после спецификации - PullRequest
0 голосов
/ 06 сентября 2018

Я делаю игру с помощью Phaser-framework и кодирую автоматические тесты с Jasmine. Все отлично работает в этом коде, кроме функции beforeAll () (вызывается после it (spec)) Консоль печатает: test2 тестовое задание когда он должен напечатать тестовый test2. Я пробовал beforeEach (), но это не имеет никакого значения.

describe("Hit Box", function() {
    var collide = false;
    beforeAll(function() {

        game = new Phaser.Game(400, 400, Phaser.AUTO, '', { preload: preload, create: create, render:render}, false, true);

        function preload() {

            game.load.image('blue', 'assets/magicien100.png');

            game.load.image('fire_ball', 'assets/red.png');

        }

        function create() {
            game.physics.startSystem(Phaser.Physics.ARCADE);
            game.world.setBounds(0, 0, 400, 400);
            game.dummyPlayer = game.add.sprite(100,100,'blue');

            game.dummyPlayer.width = 100;
            game.dummyPlayer.height = 100;

            game.physics.arcade.enable(game.dummyPlayer);

            game.dummySpell = game.add.sprite(50, 50, 'fire_ball');

            game.dummySpell.width = 75;
            game.dummySpell.height = 75;

            game.physics.arcade.enable(game.dummySpell);

            game.debug.spriteBounds(game.dummyPlayer);
            game.debug.spriteBounds(game.dummySpell);

            if (game.physics.arcade.overlap(game.dummyPlayer, game.dummySpell)) {
                collide = true;
                console.log('test');
            }   
        }

        function render(){
            game.debug.spriteBounds(game.dummyPlayer);
            game.debug.spriteBounds(game.dummySpell);
        }

    });


    it("Should have a collision", function() {
        expect(collide).toBe(true);
        console.log('test2');
    });
});

1 Ответ

0 голосов
/ 06 сентября 2018

Если Phaser.Game асинхронный, он все еще может создаваться при запуске функции it.

Попробуйте вернуть обещание beforeAll:

describe("Hit Box", function() {

var collide = false;
beforeEach(function() {
  return new Promise(function(resolve, reject) {

   game = new Phaser.Game(400, 400, Phaser.AUTO, '', { preload: preload, create: create, render:render}, false, true);

   function preload() { 
    // preload code
   }

   function create() {
    // create code
      resolve(); // to complete the promise
   }
});

});

...