我有以下规范,其中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]。
问题:如何规范这些规范?
答案 0 :(得分:1)
Flow不了解beforeEach
之类的东西,也不应该知道。 Flow表示您的测试中error
可能是null
。在您的情况下,测试运行程序应捕获异常并在这种情况下无法通过测试。因此,有两种方法可以解决此问题:
您可以修改.flowconfig
使其包含以下内容:
[options]
suppress_comment=\\(.\\|\n\\)*\\$ExpectError
然后在您的测试中:
// $ExpectError
error.message.should.equal('xxxdasfsda');
这意味着您知道这里存在流量错误,但是如果发生,它将由测试运行程序处理。
尽管它会产生更多代码,但我还是更喜欢这种方法,因为它更加明确,并且测试更加清晰:
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));
}
}