如何链接promises顺序运行mocha集成测试?

时间:2015-08-29 17:56:39

标签: javascript node.js ecmascript-6 es6-promise

我想测试两个或更多的承诺,比如集成测试,它们应该按顺序运行。示例显然是错误的,因为我作为用户只获得了之前测试的属性(电子邮件)。

请注意,我在这里使用chai-as-promise,但如果有更简单的解决方案,我不必这样做。

userStore会返回一个承诺,如果在其他测试中只有一个单行,我就可以解决它。

    it.only('find a user and update him',()=>{
    let user=userStore.find('testUser1');

    return user.should.eventually.have.property('email','testUser1@email.com')
        .then((user)=>{
            user.location='austin,texas,usa';
            userStore.save(user).should.eventually.have.property('location','austin,texas,usa');
        });

});

如果我使用return Promise.all,那么不能保证顺序运行吗?

2 个答案:

答案 0 :(得分:0)

在链接承诺时,您必须确保始终return 来自每个函数的承诺,包括.then()回调。在你的情况下:

it.only('find a user and update him', () => {
    let user = userStore.find('testUser1');
    let savedUser = user.then((u) => {
        u.location = 'austin,texas,usa';
        return userStore.save(u);
//      ^^^^^^
    });
    return Promise.all([
        user.should.eventually.have.property('email', 'testUser1@email.com'),
        savedUser.should.eventually.have.property('location', 'austin,texas,usa')
    ]);
});

答案 1 :(得分:0)

ES7 with async:

Date