Flux + Sinon + Promises测试总是通过或超时

时间:2016-02-11 10:33:10

标签: javascript unit-testing mocha sinon flux

我目前正在尝试用Sinon + Sinon-As-Promised测试Flux,但是我很难找到相关的例子,并且无论断言如何,我的测试问题总是会返回true。

我的测试目前看起来像这样:

    it('Form store should contain encounter object', function() {
    var stub = sinon.stub(restService, "loadForm").resolves(mockDataEncounter.Encounter);
    stub().then(function(value){
        console.log('Inside frmSrv');
        formStore._currentForm = value;
        expect(formStore._currentForm).to.have.property('Name');
    })
    console.log('calling action creator');
    actionCreator.loadForm("123456789012345678910003"); 
})

我期待发生的是 -

  

呼叫操作创建者 - > 操作创建者通常会进行API调用,   但在这种情况下,调用stubbed方法而不是 - > Promise是   解决后,将_currentForm设置为模拟数据,然后设置断言   检查。

然而实际发生的是:

  

致电行动创建者 - > 测试通过 - > 承诺解决

如果我在测试中添加完成回调函数,然后在断言后调用done,这会导致事务以我预期的顺序执行,但是如果我将期望的属性修改为" Name1"(不存在),测试失败,超时错误,而不是正确的错误,说该属性不存在。

我是否遗漏了一些根本性的东西,或者只是以完全错误的方式处理事情?

1 个答案:

答案 0 :(得分:1)

所以在经过一些更多的讨论之后,我必须在承诺中添加一个catch,然后调用done传递错误,以便显示正确的失败消息。

    it('Form store should contain encounter object', function(done) {
    var stub = sinon.stub(restService, "loadForm").resolves(mockDataEncounter.Encounter);
    stub().then(function(value){
        console.log('Inside frmSrv');
        formStore._currentForm = value;
        expect(formStore._currentForm).to.have.property('Name');
        done();
    }).catch(function(err){
        done(err);
    });

    console.log('calling action creator');
    actionCreator.loadForm("123456789012345678910003"); 
})