0

在使用 aqueduct 实现 OAuth 时,我错误地没有遵循测试驱动的开发理念,而我现在正在为此付出代价……

当我运行我的测试时,我得到了错误:

"No configuration file found. See README.md."

这是从我的 AppSink 类中的 initializeApplication 方法抛出的。据我了解,测试使用 config.src.yaml 文件,因此我相应地配置了我的测试工具:

application = new Application<OdexSink>();
application.configuration.port = 0;
application.configuration.configurationFilePath = "config.src.yaml";

由于我能够在实现 AuthServer 等之前运行测试,我怀疑它在此过程中发生了。

我的测试设置如下:

var app = new Application<OdexSink>();
TestClient client;

setUp(() async {
   await app.start(runOnMainIsolate: true);
   client = new TestClient(app);

   var ctx = ManagedContext.defaultContext;
   var builder = new SchemaBuilder.toSchema(ctx.persistentStore, new Schema.fromDataModel(ctx.dataModel), isTemporary: true);

   for (var cmd in builder.commands) {
     await ctx.persistentStore.execute(cmd);
   }
});

我的测试工具 start() 方法是:

Future start() async {
   RequestController.letUncaughtExceptionsEscape = true;
   application = new Application<OdexSink>();
   application.configuration.port = 0;
   application.configuration.configurationFilePath = "config.src.yaml";

   await application.start(runOnMainIsolate: true);

   await createDatabaseSchema(ManagedContext.defaultContext, sink.logger);
   await addClientRecord();
   await addClientRecord(clientID: DefaultClientID, clientSecret: DefaultClientSecret);

   client = new TestClient(application)
     ..clientID = DefaultClientID
     ..clientSecret = DefaultClientSecret;
}

我的 config.src.yaml 文件退出,并包含数据库信息。

4

1 回答 1

1

啊,只是一件小事——在你的 setUp 方法中,你正在创建和启动一个Application而不是那个TestApplication工具。它应该看起来像这样

var app = new TestApplication();

setUp(() async {
   await app.start();
});

setUp 中的所有其他内容都已在您的测试工具中完成,您可以将 TestClient 用作app.client

expect(await app.client.request("/endpoint"), hasStatus(200));
于 2017-07-08T12:54:48.180 回答