我可以为一系列结果存根吗? “ sinon.stub()。callsFake(()=> {})” AssertionError:NaN

时间:2018-11-23 23:47:25

标签: javascript testing tdd sinon sinon-chai

根据我的理解,存根是被迫采取行动的间谍,例如挑边(即投掷)。我可以/或者伪造返回一定范围的数字是否有意义? 我正在尝试测试一个名为“ Loan.prototype.payment”的“ Loan.prototype.cost”,然后进行一些计算。

在我的代码段的注释掉的部分中,我尝试创建一个数字范围(“ const rdnPaymentReturn”从85.61到85.63),并将“ payment”属性伪造为该范围(constpaymentSpy)。但是我会收到错误消息:“ AssertionError:预期NaN在27.32..27.56之内”

如果我可以/或者将“ paymentSpy”设置为数字范围(85.61-85.63),该如何解决此AssertionError?

参考:

beforeEach(function() {
        l = new Loan();
    });
    describe('#cost()', function() {
        it('should call #payment() and return the correct cost amount', function() {
            l.principal = 1000;
            l.term = 1;
            l.rate = 0.05;
            sinon.stub(l, 'payment').callsFake(() =>{ return 85.61; });
            expect(l.cost()).to.equal(27.32);
            // const rdnPaymentReturn = () =>{
            //     return Math.random() * (85.63 - 85.61) + 85.61;
            // }
            //const paymentSpy = sinon.stub(l, 'payment').callsFake(() =>{ return rdnPaymentReturn; });           
            //expect(l.cost()).to.be.within(27.32, 27.56);            
        });
    });

1 个答案:

答案 0 :(得分:0)

这不太正确:

const paymentSpy = sinon.stub(l, 'payment').callsFake(() =>{ return rdnPaymentReturn; });           

这是说:存根payment带有一个函数,该函数在被调用时返回对函数rdnPaymentReturn的引用。但是rdnPaymentReturn从未被调用。

因此您需要返回调用函数的结果:

const paymentSpy = sinon.stub(l, 'payment').callsFake(() => { 
        return rdnPaymentReturn() 
});

或仅将函数传递给调用:

const paymentSpy = sinon.stub(l, 'payment').callsFake(rdnPaymentReturn);