2016-11-24 27 views
0

试图测试JavaScript对象如何测试一个Javascript对象属性时摩卡功能,柴

Game.js

var GameManager= { 
    gameType: 'room', 
    roomDimension: [10,10], 
    playerDirection: ["W"] 
    possibleDirections: ["N","E","S","W"], 
    init: function(){ 
     if(this.gameType == 'room'){ 
      regexpNumber = /^-?[0-9]$|-?([1][0-9])$/; 
     } 
    return true; 
    }, 
    turnRight : function(){ 
    var movePosition = this.possibleDirections.indexOf(this.playerDirection); 
    if(movePosition == this.possibleDirections.length -1){ 
     return this.possibleDirections[0]; 
    } 
    return this.possibleDirections[movePosition + 1]; 
    }, 
    commandString: function(string){ 
    var command = /^[PQR]*$/; 

    if(command.test(string){ 
     return true; 
    } 
    this.errorMessageNumber = 0; 
    return false; 
} 
} 

这里是我的测试脚本test.js

var expect = require("chai").expect; 
var GameManager = require("../GameManager.js"); 

describe("Test game type", function() { 
    beforeEach(function() { 
     GameManager.gameType = 'room'; 
     GameManager.roomDimension= [10, 10]; 
     GameManager.possibleDirections: ["N","E","S","W"]; 
    }); 

    it('should commandString be as parameters', function() { 
    expect(GameManager.commandString("AABB")).to.not.be.false; 
    }); 

    it('should init toBeTruthy', function() { 
    expect(GameManager.init()).ok; 
    }); 
}); 

问题:在两种情况下,测试失败,出现TypeError错误,如下所示,其中一个t他测试:

1) Test game type should init toBeTruthy: 
    TypeError: GameManager.init is not a function at Context.<anonymous> 

由于init在这里不被认为是功能,所以如何测试?

+0

测试的预期看起来不错,也许'常量期待=需要('柴')期望;'你进口柴的方式。 – Hosar

+1

另外你是如何导出GameManager的? – Hosar

+0

@Hosar将代码更改为'var expect = require(“chai”)。expect;' 我不输出GameManager,因为它是一个简单的Javascript对象。不使用“Typescript”导出类。 – shaz

回答

0

你为什么要测试一个简单的对象? 我认为,尽管可以做到,UT更多的是做行为测试。

这么说,我觉得你正在使用的断言错误:

it('should init toBeTruthy', function() { 
    expect(GameManager.init()).to.be.ok; 
}); 

或将要与测试更加精确:

it('should init toBeTruthy', function() { 
    expect(GameManager.init()).to.be.true; 
}); 

另外,您可以参考这篇文章,可能是有益的

Why is my mocha/chai Error throwing test failing?

0

您的评论说:

I am not exporting GameManager since it is a simple Javascript object. Not using as Typescript export class.

您仍然需要导出它。无论它是否是一个简单的JavaScript对象都是完全不相关的。您必须以适合Node.js模块系统的方式编写代码。

使用你在问题中显示的代码,并固定在它的语法错误,我能得到你的第二个测试(一个用于init)工作,如果我添加到您的GameManager.js文件:

module.exports = GameManager; 

使用您在问题中显示的代码,从GameManager.js导出的值为{}。所以当你做var GameManager = require("../GameManager.js");GameManager变量被赋值为{}。因此GameManager.init的值为undefined,因此它不是函数。添加上面显示的行,将使得测试文件中的GameManager变量从GameManager.js文件中获得GameManager的值,并且测试将通过。

(您没有为GameManager.commandString提供代码,以便第一个测试仍然会失败。只需添加代码为它得到它的工作。)

+0

在GameManager上增加了建议的行。js'保持'var GameManager = require(“../GameManager.js”);',但是测试总是会失败'GameManager.gameType ='room';'如图所示'undefined'和'TypeError:Can not set property'显示gameType'undefined:'。由于某种原因,所有更改都无法正常工作。 – shaz