Javascript 在流中写入规范:测试是否设置了变量

Javascript 在流中写入规范:测试是否设置了变量,javascript,mocha.js,flowtype,Javascript,Mocha.js,Flowtype,我有以下规范,其中somePromise()返回true或抛出错误: describe('context level 1', () => { let a; let error; beforeEach(async () => { a = undefined; error = undefined; try { a = await somePromise(); } catch (e) { error = e;

我有以下规范,其中
somePromise()
返回true或抛出错误:

describe('context level 1', () => {
  let a;
  let error;

  beforeEach(async () => {
    a = undefined;
    error = undefined;

    try {
      a = await somePromise();
    } catch (e) {
      error = e;
    }
  });

  afterEach(() => {
    a = null;
    error = null;
  });


  describe('context level 2', () => {
    before(() => {
      doSomeSetup();
    });

    it('test case 1', () => {
      a.should.balahalah();
    });
  });

  describe('context level 2', () => {
    before(() => {
      doSomeSetup();
    });

    it('test case 2', () => {
      error.message.should.equal('xxxdasfsda');
    });
  });
});
规范按预期工作,但流检查(我的项目使用facebook流)显示错误,例如:

无法获取错误消息,因为null中缺少属性消息 [1]


问:这些规范应该如何在flow中编写?

flow不知道类似于每个之前的
,也不应该知道。Flow表示在您的测试中,
error
可能是
null
。在您的情况下,您的测试运行程序应该捕获异常并在这种情况下使测试失败。所以有两种方法来处理这个问题:

1) 让测试运行程序处理异常 您可以修改
.flowconfig
以包括以下内容:

[options]
suppress_comment=\\(.\\|\n\\)*\\$ExpectError
然后在你的测试中:

// $ExpectError
error.message.should.equal('xxxdasfsda');
这意味着您知道这里有一个流错误,但如果它发生,将由测试运行程序处理

2) 依靠流动 我更喜欢这种方法,尽管它会产生更多的代码,因为它更明确,测试更清晰:

it('test case 2', () => {
  if (!error) {
    assert.fail('Error was not set correctly');
  }
  error.message.should.equal('xxxdasfsda');
});

您可以显式地处理所有可能的场景,以避免流错误

description('context level 1',()=>{
描述('上下文级别2',()=>{
之前(()=>{
doSomeSetup();
});
它('测试用例1',()=>{
试一试{
常量a=等待主题();
应该(结果);
}捕获(e){
不应存在(e);
}
});
});
描述('上下文级别2',()=>{
之前(()=>{
doSomeSetup();
});
它('测试用例2',()=>{
试一试{
常量a=等待主题();
不应存在(a);
}捕获(e){
e、 message.should.equal('xxxdasfda');
}
});
});
});