2015-11-29 3 views
1

Так как Node.js создает глобальный синглтон для требуемого модуля, как я могу создать уникальные экземпляры моей игры ниже в каждом тесте? Я хочу удостовериться, что каждый раз, когда я начинаю игру, он запускается из нового игрового объекта, который инициализирует начальное значение false.Создайте новый объект для требуемого модуля режима в каждом тесте

прямо сейчас game.start, игра - это один и тот же синглтон, используемый в каждом тесте, и я не хочу этого, я не должен делиться этим синглтоном через каждый тест, это плохо, очевидно.

let chai = require('chai'), 
    should = chai.should(), 
    game = require('../src/game'); 

describe('Starting the Game',() => { 

    it('should be able to start the game',() => { 
     game.start(); 

     game.started.should.be.true; 
    }); 

    it('should contain a new board to play on when game starts',() => { 
     game.start(); 

     game.started.should.be.true; 
     should.exist(game.board); 
    }); 
}); 

game.js

var board = require('./board'), 
    player = require('./player'); 

var game = module.exports = { 
    start: start, 
    started: false, 
    board: board.create() 
}; 

function start(){ 
    game.started = true; 
}; 

ответ

2

Если вам нужно создавать новый экземпляр в каждом тесте, то вам необходимо определить game и board как класс.

Затем вы можете создать экземпляр нового экземпляра игры в методе beforeEach, который выполняется перед каждым тестовым случаем.

Game.js

var Board = require('./board'), 
    Player = require('./player'); 

class Game { 
    constructor() { 
     this.started = false; 
     this.board = new Board(); 
    } 
    start() { 
     this.started = true; 
    } 
} 

export default Game; 

игра-блок-test.js

const chai = require('chai'), 
    should = chai.should(), 
    Game = require('../../test'); 

let game; 

describe.only('Starting the Game',() => { 
    beforeEach((done) => { 
     game = new Game(); 
     done(); 
    }); 

    it('should be able to start the game',() => { 
     game.start(); 

     game.started.should.be.true; 
    }); 

    it('should contain a new board to play on when game starts',() => { 
     game.start(); 

     game.started.should.be.true; 
     should.exist(game.board); 
    }); 
}); 
+0

, что я делал до этого было клонировать его, делая это: JSON.parse (JSON. stringify (игра)); где игра является обязательным модулем. Это работало для меня, но я искал альтернативы и всех, кто сказал мне, безопасно или нормально делать в моем случае. – PositiveGuy

+0

да, поэтому вы в основном меняете это, чтобы больше не использовать модуль узла, а новые классы ES6 с экспортом? – PositiveGuy

+0

Интересно, что мне не приходилось добавлять done(), и мои тесты запускаются зеленым цветом и не работают, когда они также должны. – PositiveGuy

Смежные вопросы