Javascript 如何运行mocha集成测试?

Javascript 如何运行mocha集成测试?,javascript,node.js,ecmascript-6,es6-promise,Javascript,Node.js,Ecmascript 6,Es6 Promise,我想测试两个或多个承诺,比如集成测试,它们应该按顺序运行。这个例子显然是错误的,因为作为一个用户,我只从上一个测试(电子邮件)中获得了属性 请注意,我在这里承诺使用chai,但如果有更简单的解决方案,我不必这样做 userStore返回一个承诺,如果在其他测试中只有一行代码,我可以解决它 如果我使用returnPromise.all则不能保证按顺序运行,对吗 链接承诺时,必须确保始终返回每个函数的承诺,包括。然后()回调。就你而言: it.only('find a user and update

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

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

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


如果我使用return
Promise.all
则不能保证按顺序运行,对吗

链接承诺时,必须确保始终
返回每个函数的承诺,包括
。然后()
回调。就你而言:

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')
    ]);
});

ES7与异步:

it.only('find async a user and update him',async ()=>{

        let user=await userService.find('testUser1');
        expect(user).to.have.property('email','testUser1@email.com');
        user.location = 'austin,texas,usa';
        let savedUser=await userService.update(user);
        expect(savedUser).to.have.property('location','austin,texas,usa');
});

我试过了,但是第二个链式承诺中的用户参数是字符串的testUser1@email.com'这可能是chai-should返回的。@arisalexis:你能试试
Promise.all([user,user.should.finally…)然后([user])=>…)
?因此,测试不同内容的关键是保留一个引用,就像快照一样,指向要测试的承诺。这就是我想要的是。@Bergi-“。你必须确保总是
返回
承诺..”。事实并非如此,因为
then()
会将函数的返回值映射为一个承诺,即使它是一个泛型值。例如:
Promise.resolve('done')。然后(函数(值){return'Yabadabadoo';})。然后(console.log.bind(console))//Yabadabadoo.catch(console.error.bind(console))@caasjj:当然可以。我的意思是,当函数执行异步操作时,您总是需要返回承诺,因为问题中的所有函数都是异步的,所以我在这里省略了这一小节?我只是把今年放在可见的位置。不知道如何格式化。是的,ES7==ES2016。但不要将两者混为一谈:-)
it.only('find async a user and update him',async ()=>{

        let user=await userService.find('testUser1');
        expect(user).to.have.property('email','testUser1@email.com');
        user.location = 'austin,texas,usa';
        let savedUser=await userService.update(user);
        expect(savedUser).to.have.property('location','austin,texas,usa');
});