在流程中编写规范:测试变量是否已设置

时间:2018-08-17 04:35:18

标签: javascript mocha 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;
    }
  });

  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');
    });
  });
});

规范按预期工作,但是flow check(我的项目使用Facebook流)显示以下错误:

  

由于缺少null的属性消息,因此无法获取error.message   [1]。

问题:如何规范这些规范?

2 个答案:

答案 0 :(得分:1)

Flow不了解beforeEach之类的东西,也不应该知道。 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');
});

答案 1 :(得分:1)

您可以显式处理所有可能的情况,以避免流程错误。

Dictionary<string, string> yourDictionary = new Dictionary<string, string>();
string pathF = "C:\\fich.txt";
StreamReader file = new StreamReader(pathF, Encoding.Default);
string step = "";
List<string> stream = new List<string>();
while ((step = file.ReadLine()) != null)
{
    if (!string.IsNullOrEmpty(step))
    {
        yourDictionary.Add(step.Substring(0, step.IndexOf(':')), step.Substring(step.IndexOf(':') + 1));
    }
}