【问题标题】:mocha: call a test case synchronouslymocha:同步调用测试用例
【发布时间】:2018-03-26 05:13:43
【问题描述】:

是否可以与 Mocha 同步调用测试用例?例如,我有以下代码:

context('Context of test suite', () => {
  it('test case name', () => {
    //call expect() a few times
  })
})
console.log('foo')

我想运行它,但我想保证foo 在测试用例执行完毕并且通过或失败之前不会被打印。 it 不返回 Promise,context 也不返回,所以我不能使用 then 来实现。我想要的可能吗?

此测试用例存在于 after 块内。

【问题讨论】:

  • 您到底想达到什么目的?我相信你知道XY Problem
  • 我不明白这个问题。我正在尝试使测试用例同步执行。
  • 测试确实会同步运行,除非您在其中执行异步操作。如果您只是调用expect () 几次,应该没有问题。
  • 附注为什么要在after 块中进行测试?
  • 因为我需要在所有其他测试都运行之后再运行一个测试。

标签: javascript mocha.js


【解决方案1】:

您可以将 console.log 移动到嵌套的 after 中:

describe('all my tests', () => {

  it('#1', done => setTimeout(done, 500))
  it('#2', done => setTimeout(done, 500))
  it('#3', done => setTimeout(done, 500))

  after(() => {

    context('Context of test suite', () => {

      it('test case name', () => {})

      after(() => {
        console.log('foo');
      });
    })

  });

});

虽然我很难理解您为什么要使用这样的设置。一个问题是您不能在根级别 after(任何 describe 块之外的设置)内使用此设置,而且,after 不是用于额外测试,它是为了清理 测试之后。

我可能会使用这样的东西:

describe('all my tests', () => {

  it('#1', done => setTimeout(done, 500))
  it('#2', done => setTimeout(done, 500))
  it('#3', done => setTimeout(done, 500))

});

describe('Context of test suite', () => {

  it('test case name', () => {})

  after(() => {
    console.log('foo');
  });
})

即只需将必须运行的套件放在最后,好吧,最后。如果愿意,您可以将最后一个 after 移出套件并将其提升为根级挂钩。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-31
    • 2012-08-22
    相关资源
    最近更新 更多