单元测试:无法接收异步

时间:2018-02-23 07:51:02

标签: reactjs unit-testing

我正在练习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" />);
});

1 个答案:

答案 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);
});