我正在通过EverCraft kata来提高我的 Javascript 技能并且遇到了一个小问题,我无法弄清楚如何按照我想要的方式工作。
我正在使用Jasmine进行测试并进行以下测试:
describe("As an attacker I want to be able to damage my enemies so that they will die and I will live", function () {
var character = null;
beforeEach(function () {
character = new Character();
});
it("If attack is successful, other character takes 1 point of damage when hit", function () {
var beginningHitPoints = character.HitPoints,
roll = 15;
character.Attacked(roll);
expect(character.HitPoints).toBe(beginningHitPoints - 1);
});
};
此测试失败,因为 character.hitPoints 为 5,但预期为 4。
我的 Character 对象代码是:(注意:为简洁起见,我省略了一些与此问题无关的代码)
var Character = function () {
var hitPoints = 5,
...
attacked = function (roll) {
var isHit = isAHit(roll);
if (isAHit) {
hitPoints = hitPoints - 1;
}
}
...
;
return {
...
HitPoints: hitPoints,
Attacked: attacked
...
};
};
我想我理解正在发生的事情,只是不知道如何让它按我期望的方式工作。我相信当我返回时HitPoints: hitPoints
,而不是像我预期的那样返回对的引用var hitPoints = 5
,它实际上是在返回变量的值。换句话说,该声明相当于HitPoints: 5
我想知道的是,当我打电话时,我如何Attacked
返回HitPoints
更新的值hitPoints
?