setUp()方法中的注入导致框架不等待Future完成

时间:2015-02-10 06:55:19

标签: unit-testing dependency-injection dart angular-dart

我正在测试AngularDart组件。我正在尝试获取模板并将其放在TemplateCache方法的setUp()中。为此,我需要注入模板缓存。但是setUp()中的注入会使框架继续使用测试方法,而不是等待Future完成。这是一个简化的例子。

import 'dart:async';
import 'package:angular/angular.dart';
import 'package:mock/mock.dart';
import 'package:unittest/unittest.dart';
import 'package:angular/mock/test_injection.dart';
import 'package:angular/mock/module.dart';
import 'package:di/di.dart';


class MyTest {

  static main() {

    group("SetUp with future that waits", () {
      setUp(() {
        return new Future.value("First").then((_) => print(_));
      });

      test("Welcome to the world of tomorrow!", () {
        print("Second");
      });
    });

    group("SetUp with future that doesn't wait", () {
      setUp(inject((Injector inject) { // injection causes the test to not wait
        return new Future.value("First").then((_) => print(_));
      }));

      test("Welcome to the world of tomorrow!", () {
        print("Second");
      });
    });
  }
}

在控制台中,您可以看到打印的消息:First,Second,Second,First。

我认为必须是inject没有返回Future。我还能做些什么来让框架注入我需要的对象并等待Future中的setUp()

1 个答案:

答案 0 :(得分:1)

这就是我需要的。错误是试图从inject本身返回一些东西。实际上这很简单:

  setUp(() {
    // ...
    inject((Injectable injectable) {
        // inject the objects here and save them in variables
    });
    // work with the variables
    return new Future.value("First").then((_) => print(_));
  });