我的问题的答案可能非常简单和愚蠢,但到目前为止我自己还找不到。使用Play Framework,emberjs和FluentLenium,我编写了一个非常简单的功能测试,但不能使其在 IntelliJ IDEA 13下工作* 。由于某些原因,当我使用IntelliJ运行测试时, 找不到 位于 public /和app / 文件夹中的所有 资产 。 *
这是我的代码:
import org.junit.Test; import play.libs.F.Callback; import play.test.TestBrowser; import play.test.WithApplication; import static org.fest.assertions.Assertions.assertThat; import static play.test.Helpers.*; public class HomePageTest extends FluentTests { @Test public void hello_world_test() { running(testServer(3333, fakeApplication(inMemoryDatabase())), FIREFOX, new Callback<TestBrowser>() { public void invoke(TestBrowser browser) { HomePage homePage = new HomePage(browser.getDriver()); homePage.go(); homePage.isAt(); assertThat(browser.pageSource()).contains("Hello world!"); } }); } } public class HomePage extends BaseFluentPage { public HomePage(WebDriver driver) { super(driver); } @Override public String getUrl() { return BASE_URL; } @Override public void isAt() { await().atMost(TIMEOUT).until(".ember-application").isPresent(); } } public abstract class BaseFluentPage extends FluentPage { protected static final String BASE_URL = "http://localhost:3333/#/"; protected static final int TIMEOUT = 5000; protected BaseFluentPage(WebDriver driver) { super(driver); } }
这是我在IntelliJ IDEA日志中收到的错误消息:
[[36mdebug[0m] application - Unforseen error for lib/jquery/jquery.js at /public java.lang.RuntimeException: no resource at controllers.Assets$$anonfun$controllers$Assets$$assetInfoFromResource$1$$anonfun$10.apply(Assets.scala:214) ~[play_2.11-2.3.0.jar:na] at controllers.Assets$$anonfun$controllers$Assets$$assetInfoFromResource$1$$anonfun$10.apply(Assets.scala:214) ~[play_2.11-2.3.0.jar:na] at scala.Option.getOrElse(Option.scala:120) [scala-library-2.11.1.jar:na] at controllers.Assets$$anonfun$controllers$Assets$$assetInfoFromResource$1.apply(Assets.scala:214) ~[play_2.11-2.3.0.jar:na] at controllers.Assets$$anonfun$controllers$Assets$$assetInfoFromResource$1.apply(Assets.scala:213) ~[play_2.11-2.3.0.jar:na]
谢谢!
我的配置几乎是全新的。我使用了激活程序命令行来创建项目并生成想法配置文件。这是我当前文件夹结构的外观(我只列出运行集成测试时丢失的文件夹):
app >> assets >> javascripts >> app.js public >> stylesheets >> style.css images >> favicon.ico
使用命令行运行测试时,一切正常
activator test
由于我尚未找到解决方案,因此我提供了有关配置的更多代码和信息,因此也许有人会发现问题。
index.scala.html:
<html> <head> <title>Facebook-API</title> <link rel="stylesheet" media="screen" href="@routes.Assets.at("lib/bootstrap/css/bootstrap.min.css")"> <link rel="stylesheet" media="screen" href="@routes.Assets.at("stylesheets/style.css")"> <link rel="shortcut icon" type="image/png" href="@routes.Assets.at("images/favicon.png")"> <script src="@routes.Assets.at("lib/jquery/jquery.js")" type="text/javascript"></script> <script src="@routes.Assets.at("lib/bootstrap/js/bootstrap.min.js")"></script> <script src="@routes.Assets.at("lib/handlebars/handlebars.js")" type="text/javascript")"></script> <script src="@routes.Assets.at("lib/emberjs/ember.js")" type="text/javascript"></script> <script src="@routes.Assets.at("lib/emberjs-data/ember-data.js")" type="text/javascript")"></script> <script src="@routes.Assets.at("javascripts/app.js")" type="text/javascript")"></script> </head> <body> @ember_content </body> </html>
plugins.sbt:
resolvers += "Typesafe repository" at "http://repo.typesafe.com/typesafe/releases/" // The Play plugin addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.3.2") // web plugins addSbtPlugin("com.typesafe.sbt" % "sbt-less" % "1.0.0") addSbtPlugin("com.typesafe.sbt" % "sbt-jshint" % "1.0.0") addSbtPlugin("com.typesafe.sbt" % "sbt-rjs" % "1.0.1") addSbtPlugin("com.typesafe.sbt" % "sbt-digest" % "1.0.0") addSbtPlugin("com.typesafe.sbt" % "sbt-mocha" % "1.0.0") addSbtPlugin("com.typesafe.sbt" % "sbt-web" % "1.0.2")
build.sbt:
name := """facebook-api""" version := "1.0-SNAPSHOT" lazy val root = (project in file(".")).enablePlugins(PlayJava, SbtWeb) scalaVersion := "2.11.1" libraryDependencies ++= Seq( javaJdbc, javaEbean, cache, javaWs, "org.webjars" % "bootstrap" % "3.2.0", "org.webjars" % "jquery" % "2.1.1", "org.webjars" % "handlebars" % "1.3.0", "org.webjars" % "emberjs" % "1.5.0", "org.webjars" % "emberjs-data" % "1.0.0-beta.8" )
我再次更新了帖子以反映我当前的项目结构和代码(请参见上文)。我修改了代码以使用WebJars而不是手动下载的js库,按照迁移到Play 2.3.X的步骤,更新为最新的Play版本,并按照步骤在Play文档中指定的IntelliJ中正确导入SBT&Play项目。现在,当我从IntelliJ运行测试时,我仍然遇到相同的错误,但是,我可以看到在target /中生成了一个web /文件夹,其中包含一个文件夹test /,其中包含我项目中具有正确文件夹结构的所有资产。我将此文件夹添加为IntelliJ中的Resource / Test Resource文件夹,但仍然没有成功。我还添加了具有相同结果的公用文件夹。
我真的觉得我正在接近解决方案。实际上,我尝试了很多事情,发现如果删除sbt- rjs插件(RequireJS),则dev中的运行代码(激活器运行)会崩溃,并出现相同的错误。我还没有为我的JS文件设置RequireJS(添加main.js文件),并且直到我真正需要它之前都不想这样做,除非它可以解决我的问题。有什么想法吗?
最后,这是解决此问题的方法。
我将此行添加到我的build.sbt文件中:
对于SBT 0.x:
unmanagedResourceDirectories in Test <+= baseDirectory ( _ /"target/web/public/test" )
对于SBT 1.x:
unmanagedResourceDirectories in Test += baseDirectory ( _ /"target/web/public/test" ).value
感谢@MarkVedder和@JarmoPertman的出色评论,这些评论使我对这个解决方案感到满意!