私はJavascript のスキルを向上させる方法としてEverCraft kataに取り組んでいますが、小さな問題に遭遇しました。
テストにジャスミンを使用しており、次のテストがあります。
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
です。