2014-02-21 6 views
0

Я попытался сделать мой тест подключиться к локальной PostgreSQL: играть тестPlay: не удается подключиться к базе данных

@Before 
public void startApp() throws Exception { 
    // Set up connection to test database, different from main database. Config better 
    // should be used instead of hard-coding. 
    Map<String, String> settings = new HashMap<String, String>(); 
    settings.put("db.default.driver", "org.postgresql.Driver"); 
    settings.put("db.default.url", "jdbc:postgresql://localhost:5432/db_name"); 
    settings.put("db.default.user", "admin"); 
    settings.put("db.default.password", "pw"); 
// settings.put("applyEvolutions.default", "true"); 
// settings.put("applyDownEvolutions.default", "true"); 
// settings.put("evolutionplugin", "disabled"); 
    app = Helpers.fakeApplication(settings); 
    Helpers.start(app); 
} 
// 
// @After 
// public void stopApp() throws Exception { 
//  Helpers.stop(app); 
// } 
// 


@Test 
public void test() { 
    running(testServer(3333, app), HTMLUNIT, 
      new Callback<TestBrowser>() { 
       public void invoke(TestBrowser browser) { 
        browser.goTo("http://localhost:3333"); 
        browser.takeScreenShot(); 
        assertThat(browser.pageSource()).contains("Login"); 
       } 
      }); 
} 

Но:

[error] Test test.IntegrationTest.test failed: java.lang.RuntimeException: Configuration  error: Configuration error[Cannot connect to database [default]] 
[error]  at play.api.test.TestServer.start(Selenium.scala:146) 
[error]  at play.test.Helpers.start(Helpers.java:401) 
[error]  at play.test.Helpers.running(Helpers.java:430) 
[error]  at test.IntegrationTest.test(IntegrationTest.java:46) 
[error]  ... 
[error] Caused by: Configuration error: Configuration error[Cannot connect to database [default]] 

Мой дб на (игры выполняются работы)

My conf в hashmap такой же, как в application.conf

Любая идея? Спасибо :)

+0

Вы копируете тот же код? В коде говорится, что имя базы данных - имя db_name, тогда как в стеке ошибок указано значение по умолчанию. – Kick

+0

Я редактировал мой conf только для публикации, но я стараюсь с правильным;) –

ответ

0

С нет @Before и нет изменения в application.conf (база данных Dev), это работает

@Test 
public void test() { 
    running(fakeApplication(), new Runnable() { 
     public void run() { 
      Logger.debug("running"); 
     } 
    }); 
} 


@Test 
public void testInServer() { 
    running(testServer(3333), new Runnable() { 
     public void run() { 
      assertThat(
        WS.url("http://localhost:3333").get().get().getStatus() 
      ).isEqualTo(OK); 
     } 
    }); 
} 


@Test 
public void runInBrowser() { 
    running(testServer(3333), HTMLUNIT, new F.Callback<TestBrowser>() { 
     public void invoke(TestBrowser browser) { 
//    browser.goTo("http://localhost:3333"); 
//    browser.$("a").click(); 
     } 
    }); 
} 

Не забудьте добавить в ваши appDependencies:

 "org.fluentlenium" % "fluentlenium-core" % "0.9.2" 
1

Одна проблема с исходным кодом заключается в том, что он говорит Helpers.start(app);, но затем передает переменную app в testServer(3333, app). Создание тестового сервера запустит совершенно новое отдельное приложение (см. Исходный код scala для TestApplication в /framework/src/play/src/main/scala/play/core/system/ApplicationProvider.scala).
Так что Helpers.start(app) на самом деле не запускает приложение, которое будет использоваться.

Если вам необходимо сделать какую-либо конкретное приложение инициализации, которые будут сохраняться через testServer вызова, вместо того, чтобы использовать @Before аннотации, вам нужно написать класс, производный от GlobalSettings, переопределить метод onStart, а затем создать приложение с

FakeApplication app = fakeApplication(extraConfiguration, new TestGlobalSettings()); 

это не совсем очевидно для меня, почему не было бы никакой связи с БД в этом случае, но это то, что решить мою проблему, когда я хотел работать с БД в оперативной памяти и инициализировать его запуск тестового сервера.

Смежные вопросы