助焊剂 + Sinon + 承诺测试总是通过或超时



我目前正在尝试使用 Sinon + Sinon-As-Promise 测试 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 调用, 但在这种情况下调用存根方法代替 -> 承诺是 已解决,_currentForm设置为模拟数据,然后断言 被选中。

然而,实际发生的是:

调用操作创建者 -> 测试通过 -> 承诺解析

如果我向测试添加一个 done 回调,然后在断言后调用 done,这会导致事情按我预期的顺序执行,但是如果我将预期的属性修改为"Name1"(不存在(,测试将失败并显示超时错误,而不是正确的错误说该属性不存在。

我在这里错过了一些基本的东西,还是只是以完全错误的方式做事?

因此,经过一番摆弄,我解决了这个问题,我不得不在承诺中添加一个捕获,然后在错误中调用完成传递,以便显示正确的失败消息。

    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"); 
})

最新更新