1

我正在尝试将以下 Node.js 测试转换为 Dart:

var fs = require('fs');
exports.asyncTest = function(test){
  fs.stat('test.txt', function(err, stats) {
    test.expect(2);
    test.strictEqual(err, null);
    test.notStrictEqual(stats.size, 0);
    test.done();
  })
};

到目前为止,我有:

import 'package:unittest/unittest.dart';
import 'dart:io';

main() {
  test('File is not empty', () {
    var stats = new File('test.txt').length().then(
      expectAsync1((v) {
        expect(v, isNot(0));
      }));
  });
}

这可行,但我希望测试失败而不是在找不到文件时终止。这是如何实现的?

4

1 回答 1

4

您可以在 File 上使用 exists() 方法。File.exists() 返回一个 Future<bool>,所以做这样的事情。

main(){
  test('File Exists, and is not empty', () {
    var f = new File('test.txt');
    f.exists().then(expectAsync1((v) {
      expect(v, true);
      if (v)
        f.length().then(expectAsync1((l) => expect(l, isNot(0))));
    }));
  });
}

当然,如果它被分成两个测试会更漂亮。一个“文件存在”和一个“文件不为空”,后者仅在第一个通过时运行。但是我对 unittest 库的研究还不够,无法了解如何使测试相互依赖。

于 2013-01-13T11:36:45.513 回答