1

我正在制作一个 10 针保龄球游戏并测试奖励积分功能,我想为每个滚动传递一个硬编码结果列表 (pinsHit)。主要的构造函数是 Game、Frame 和 Roll。

由于奖金是通过将两个后续掷球的得分加倍来获得的(10 个球瓶击中帧的第一个球),并将一个后续掷球的分数加倍(在帧结束时 10 个球瓶(2 个球)),我们需要计算它在所有 10 帧结束时在 Game 中,因为 Game 存储了所有帧及其属性(点数、罢工/备用?)并且可以事后循环。(已添加此信息作为上下文,因为此问题获得了风滚草徽章,所以现在您明白为什么我期望 40 为game._score

不幸的是,我不能Roll#outcome使用 Jasmine 的存根,returnValues因为Roll#outcome它像 3 个函数一样被深埋(playArgTimes 调用播放调用点名结果)。

另一种方法是,如果 Jasmine 有一个类似的方法passValues允许我做类似spyOn(game, "play").and.passValues()的事情,因为 play 方法实际上允许通过将该结果作为参数传递来对滚动结果进行硬编码。

我在想这可能是编写自定义函数的好时机,但我真的不知道从哪里开始,我是编程新手。关于下一步的任何想法?我错过了一些明显的东西吗?

我的测试:

  it('adds bonuses to points', function(){
spyOn(roll, "outcome").and.returnValues(10,3,4,9,1,2,2); //roll is buried too deep to stub
helperModule.playArgTimes(4,game);
game.bonusCalc();
game.updateScore();
expect(game._score).toEqual(40);
});
4

0 回答 0