我试图让我的测试连接到我的本地PostgreSQL:play test
@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]]
我的数据库开启(播放运行)
我在hashmap中的conf与application.conf中的相同
有什么想法吗? 谢谢:))
答案 0 :(得分:1)
原始代码的一个问题是它显示Helpers.start(app);
,但它会将app
变量传递给testServer(3333, app)
。创建测试服务器将启动一个全新的独立应用程序(请参阅TestApplication
中/framework/src/play/src/main/scala/play/core/system/ApplicationProvider.scala
的scala源代码。)
因此Helpers.start(app)
实际上并未启动将要使用的应用。
如果您需要执行任何特定于应用程序的初始化,该初始化将在testServer
调用中持续存在,而不是使用@Before
注释,则需要编写一个派生自GlobalSettings
的类,覆盖onStart
方法,然后使用
FakeApplication app = fakeApplication(extraConfiguration, new TestGlobalSettings());
对于我来说,为什么在这种情况下不会与DB连接,这并不是很明显,但是当我想运行内存数据库并为测试服务器运行初始化时,这就解决了我的问题。
答案 1 :(得分: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"