2015-05-06 45 views
1

我有文件web_server.dart一些代碼,這是擺在文件夾:飛鏢單元測試的pgsql查詢錯誤

import 'dart:async'; 
import 'package:redstone/server.dart' as app; 
import 'package:redstone_mapper/mapper.dart'; 
import 'package:redstone_mapper/plugin.dart'; 
import 'package:redstone_mapper_pg/manager.dart'; 
import 'package:shelf/shelf.dart' as shelf; 

main() { 
    var uri = "postgres://rpss:@10.10.10.10:5432/rty"; 
    var dbManager = new PostgreSqlManager(uri, min: 1, max: 3); 
    app.addPlugin(getMapperPlugin(dbManager)); 
    app.setupConsoleLog(); 
    app.start(address: '127.0.0.1', port: 8100); 
} 

PostgreSql get pgsql => app.request.attributes.dbConn; 

Future getNextPlanId() { 
    return pgsql.query("select smth from table1", String); 
} 

有一個名爲web_server_test.dart另一個鏢文件測試文件夾:

library web_server_test; 

import 'package:unittest/unittest.dart'; 
import 'dart:async'; 
import '../bin/web_server.dart'; 

void main() { 
    group('test1',() { 

    test("Step 1: must be PASS",(){ 
      return getNextPlanId().then((onValue){ 
       expect(onValue, hasLength(4)); 
      }); 
     }); 
    }); 
} 

當我運行web_server_test.dart文件,我得到一個錯誤:

測試失敗:被捕獲null對象沒有getter'屬性'。
NoSuchMethodError:找不到方法:'attributes'

我嘗試運行web_server.dart或停止運行。錯誤正在上升。

+0

我不知道如何解決您的問題,只是一個建議。不要使用相對路徑從其他頂級目錄導入。如果要從其他頂級目錄導入代碼,請將代碼移動到'lib'目錄,並使用像import'package:my_package/server.dart';'這樣的包導入。 –

回答

0

看起來像在你的測試中,你不是引導app。您的主要代碼必須被調用以進行測試。測試中不會自動調用main()函數。

您可以在函數中提取其邏輯並將其稱爲測試設置。

PostgreSql get pgsql => app.request.attributes.dbConn;當你在request上致電attributes時墜毀,它可能沒有像你想要的那樣被初始化。