2016-12-15 66 views
3

所以我有一个文件,user-database,这看起来是这样的:兴农磕碰helper方法

export function foo(id: number): Promise<boolean> { 
    return new Promise<boolean>((resolve, reject) => { 
    findSomething(id) 
    .then((data) => { 
     //do something with data 
    }) 
    } 
} 

export function findSomething(id: number): Promise<Object> { 
    return new Promise<Object> ((resolve, reject) => { 
    let query = 'SELECT * FROM user'; 
    db.executeQuery(query); 
    .then(data) => { 
     if(data.length < 1) { reject(new Error('whoops')); } 
     resolve(data); 
    }, (err) => { 
     reject(err); 
    }) 
    }) 
} 

所以我写的用兴农的外部功能,foo单元测试,因此我想要存根它所调用的功能,findSomething。我这样做如下:

import * as user_db from '../../src/user-database'; 

describe('POST /someEndpoint',() => { 
    describe('when successful',() => { 
    let stub; 

    beforeEach(function() { 
     stub = sinon.stub(user_db, 'findSomething'); 
    }); 

    afterEach(function() { 
     stub.restore(); 
    }); 

    it('should respond with 200', function(done) { 
     stub.returns(anObjectIPredefine); 

     request(server) 
     .post(basePath) 
     .send(aPayloadIPredefine) 
     .expect(200, done); 
    }); 
    } 
} 

当我运行测试,我不看对象,我说的是存根与此stub.returns(anObjectIPredefine)返回。我实际上具有正常执行的功能findSomething,并从dB获取数据。有什么明显的我做错了吗?我唯一的猜测是,stub = sinon.stub(user_db, 'findSomething')不是正确的语法,用于存储与被测函数在相同范围内定义的函数。我无法找到一个替代语法。

回答

0

所以我最终做的是将我希望存根的功能移到不同的文件。完成后,桩可按预期工作。可能不是最好的解决方案,但对于处于类似情况的任何人来说,绝对是一个快速的创可贴。

0

你试图嘲笑承诺,就好像它是一个功能。 stub.returns用于模拟函数的返回。在你的情况下,你想对承诺then

看看像sinon-as-promised而不是。

+0

我在你的建议后试过。把我所有的'stub.return()'改成''stub.resolves()'。包括sinon库后,当然还包括图书馆。同样的事情正在发生,实际上并不像是扼杀,而是实际上调用真正的方法。 – TovrikTheThird