Sinon Promise在单元测试完成后解决

时间:2016-11-07 17:11:38

标签: unit-testing promise sinon chai

我想为具有承诺的特定函数编写一些单元测试,但是,在测试完成后,promise会解决。例如:

  function systemUnderTest(promise, cb) {
    return promise.then(data => {
      console.log('>>>', data);
      cb(data);
    });
  }

  it('resolves and calls the sampleFunc', () => {
    const spyCallback = spy(data => data)
    systemUnderTest(Promise.resolve(42), spyCallback);
    expect(spyCallback.callCount).to.equal(1);
  });

我可以看到我的log语句在测试完成后触发,所以当断言运行时,callCount显然是0,因为它当时没有运行但是很久以后。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

由于您正在传递一个回调,因此窥探它并没有多大意义。但这是一个例子(只是替换你自己的承诺):

it('some test',function(done){
        const deferred = q.defer();
        deferred.resolve("Good");
        const callBack = function(data) {                
            expect(spy.called).to.be.true;
            done();
        }

        let spy = sinon.spy(callBack);
        systemUnderTest(deferred.promise,spy);        
    })

现在我认为应该更好的是测试回调数据的结果,而不是间谍。这样您还可以确保调用该函数。请观察完成参数 像这样:

it('some test',function(done){
        const deferred = q.defer();
        deferred.resolve("Good");
        const callBack = function(data) {                
            expect(data).to.exist; //or any other assertion.
            done();
        }           

        systemUnderTest(deferred.promise,callBack);        
    })

希望得到这个帮助。