2015-11-29 30 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

如果你需要在每个测试实例化一个新的实例,那么你需要定义gameboard为一类。

然后,您可以在每个测试用例之前执行的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。字符串化(游戏));游戏是必需的模块。这对我有用,但是在寻找替代品,任何人告诉我,如果这对我来说是安全或正常的。 – PositiveGuy

+0

是啊所以你基本上改变这个不再使用节点模块,但新的ES6类与出口? – PositiveGuy

+0

有趣我没有必要添加完成()和我的测试运行绿色和失败时,他们也应该。 – PositiveGuy

相关问题