我正在练习async / await in react。
在这种情况下,我在 NavList.js 中编写了该函数。
当我运行 npm run watch 时,会显示消息:
应该看到:10
这是成功的,但是当我进行单元测试时,我什么都没有,只有终端上的传递消息。
PASS resources / assets / js / test / navList.test.js
如何在单元测试中收到异步/等待?
NavList.js
constructor(props){
super(props)
// test async
function resolveAfter2Seconds(x) {
return new Promise(resolve => {
setTimeout(() => {
resolve(x);
}, 2000);
});
}
async function runAsync() {
var waitForTime = await resolveAfter2Seconds(10);
console.log('This should be seen: ',waitForTime); // 10
}
runAsync();
}
NavList.test.js
it.only('function setArticleGroup() ', function () {
let app = shallow(<NavList sieve="info" />);
});
答案 0 :(得分:0)
构造函数中的函数很难测试,所以我将它们移到类方法中。
class TestClass extends React.Component {
constructor(props) {
super(props)
// test async
this.runAsync = this.runAsync.bind(this);
this.runAsync();
}
resolveAfter2Seconds(x) {
return new Promise(resolve => {
setTimeout(() => {
resolve(x);
}, 2000);
});
}
async runAsync() {
return await this.resolveAfter2Seconds(10);
}
}
您的测试的问题在于它根本不是测试。你还没有写任何断言来测试它。
由于我们应该有一个值来测试,我们从runAsync
函数返回值。
it.only('function setArticleGroup() ', async function () {
const app = shallow(<NavList sieve="info" />);
const result = await app.instance().runAsync();
expect(result).to.equal(10);
});