2017-07-14 86 views
1

我有一个函数返回一个Promise周围有它自己的实现的承诺/回调的,像这样的作品的另一个功能包:单元测试使用兴农与承诺

function getResult() { 
    return new Promise((resolve, reject) => { 
    const service = Service(config) 
    return Service.initialize({scope: 'param'}) 
     .success((result) => { 
     result ? resolve(service.res) : reject(new Error('Something happened')) 
     }) 
     .error(() => { 
     reject(new Error('Something happened')) 
    )}) 
    }) 
} 

编辑:我可以重新编写了上述函数是这样的:

function getResult(done) { 
const service = Service(config) 
    Service.initialize({scope: 'param'}) 
    .success((result) => { 
    result ? done(null, result) : done(new Error('Something happened'), null)) 
    }) 
    .error(() => { 
    done(new Error('Something happened'), null) 
    } 

我不知道我怎么能单元测试这样的事情?我试图stubService和使用sinon来检查它是否是所谓的,但下面不工作:

it('should initialize service and return res',() => { 
    const mockService = sinon.stub(Service, 'initialize') 
    mockService.withArgs({scope: 'param'}).returns(Promise.resolve(true)) 

    expect(mockService.callCount).to.equal(1) 
    }) 

任何帮助,将不胜感激。

+0

服务来自另一个库或您创建的东西?这似乎是一个或另一个是多余的,但我不能没有更多的背景知道你想要做什么。 –

+0

是的,服务来自我们创建的另一个库,我们将它用作NPM模块。我知道服务的成功/错误功能看起来很奇怪,但我无法控制它。你认为这可以以更好的方式实施吗? – Hawkes

+0

但是,您可能不需要在此使用承诺。如果你展示更多的代码或让我知道图书馆,我可以想到一些东西。 –

回答

0

你只是检查它是否被调用,所以不需要等待任何东西。

it('should initialize service and return res',() => { 
    const mockService = sinon.stub(Service, 'initialize') 
    mockService.withArgs({scope: 'param'}).returns(Promise.resolve(true)) 

    getResult() 

    expect(mockService.callCount).to.equal(1) 
    }) 
+0

我不知道为什么,但以下不起作用: const mockService = sinon.stub(Service,'initialize') mockService.withArgs({scope:'param'})。returns({ 'success' ()=> { 还真 }, '错误':函数(){}} ) 的getResult() 预期(mockService.callCount).to.equal(1) – Hawkes

+0

啊,也许是因为你是调用'const service = Service(config)'并覆盖你的存根? –

+0

IDK,我甚至尝试在创建存根时传入相同的配置,但那也不起作用。默认情况下,不应该将存根应用于'Service'的属性'initialize'吗? – Hawkes