在每个testing中为所需的模块模块创build新对象

由于Node.js为所需的模块创build了一个全局单例,我如何在每个testing中创build下面我的游戏的独特实例? 我想确保每次开始游戏时,都是从一个新的游戏对象开始的,这个游戏对象将开始初始化为false。

现在game.start,游戏是每个testing中使用的同一个单例,我不希望这样,我不应该通过每个testing来分享这个单例,这显然是不好的。

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; }; 

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

然后,您可以在每个testing用例之前执行的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); }); });