spyOn(obj,“method”)。and.passValues(first,second ..)Jasmine

时间:2016-09-24 15:08:31

标签: javascript unit-testing jasmine stubs

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

由于奖励是通过将两个随后的罢工点数加倍(10个针脚击中第一卷框架)并将一个后续卷的点数加倍(10个针脚到框架末端(2个卷))来奖励,我们需要在所有10帧结束时在游戏中计算它,因为游戏存储了所有帧及其属性(点,打击/备用?)并且可以事后循环。 (已将此信息添加到上下文中,因此此问题得到tumbleweed badge所以现在您明白为什么我期望game._score

不幸的是,我不能使用Jasmine的Roll#outcome存根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);
});

0 个答案:

没有答案