2016-02-12 42 views
0

我更新了我的application.conf文件,以接受結構化JSON文字的數組用於特定配置的值:遊戲框架 - 覆蓋對象文本的測試配置陣列

auth.clientKeys = [ 
    {"id": "client1", "secret": "secretvalue1"}, 
    {"id": "client2", "secret": "secretvalue2"} 
] 

這似乎只是正常工作時在我的應用程序中訪問它,但我不確定我應該如何使用FakeApplication在我的測試中設置這些值。我以爲我可以只使用一個地圖

FakeApplication(additionalConfiguration = Map(
"auth.clientKeys" -> Array(Map("id" -> "testClient", "secret" -> "testSecret")))) 

,但我得到的錯誤信息

BugOrBroken: : bug in method caller: not valid to create ConfigValue from: [Lscala.collection.immutable.Map;@4997a288 (ConfigImpl.java:275) 

我怎麼能在我的測試覆蓋這些值?

更新1:

我使用Java集合也試圖結合ConfigValueFactory沒有運氣:

import collection.JavaConversions._ 
    def fakeApplicationConfig = FakeApplication(additionalConfiguration = Map(
    "auth.clientKeys" -> ConfigValueFactory.fromIterable(asJavaIterable(Array(ConfigValueFactory.fromMap(Map("id" -> "testClient", "secret" -> "testSecret"))))))) 

這將導致一個類似的錯誤:

BugOrBroken: : bug in method caller: not valid to create ConfigValue from: ConfigString("testSecret") 

更新2 :

我還沒找到有效的方法,所以我是instea d使用單個JSON在我的配置字面來解決此問題:

auth.clientKeys = {"client1": "secretvalue1", "client2": "secretvalue2"} 

這是不太靈活,但它的工作原理現在,我可以用fakeApplication測試:

FakeApplication(additionalConfiguration = Map(
"auth.clientKeys" -> Map("testClient" -> "testSecret", "testClient2" -> "testSecret2"))) 

回答

0

這只是一個猜測,但我認爲這可能是因爲你使用的是immutable Map這意味着你不能更新值

嘗試使用mutable.Map

我從來沒有試過在conf文件做這樣的事情,所以不能肯定,如果這就是雖然

+0

不過,當我嘗試使用沒有運氣,唯一的問題: 高清fakeApplicationConfig = FakeApplication(additionalConfiguration =地圖( (注意:如果你使用的是「test」,那麼你可以使用「test.html」我不能用可變結構替換第一個映射 - 它不能編譯) – user949286