Javascript 如何运行mocha集成测试?
我想测试两个或多个承诺,比如集成测试,它们应该按顺序运行。这个例子显然是错误的,因为作为一个用户,我只从上一个测试(电子邮件)中获得了属性 请注意,我在这里承诺使用chai,但如果有更简单的解决方案,我不必这样做 userStore返回一个承诺,如果在其他测试中只有一行代码,我可以解决它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
如果我使用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');
});