我的问题的答案可能非常简单和愚蠢,但是到目前为止我自己找不到。使用 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
更新 2
由于我还没有找到解决方案,我提供了更多关于我的配置的代码和信息,所以也许有人会发现问题。
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>
插件.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")
构建.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"
)
更新 3:
我再次更新了我的帖子以反映我当前的项目结构和代码(见上文)。我修改了我的代码以使用 WebJars 而不是手动下载的 js 库,按照迁移到 Play 2.3.X 的步骤,更新到最后一个 Play 版本,并按照在 Play 文档中指定的 IntelliJ 中正确导入 SBT & Play 项目的步骤。现在,当我从 IntelliJ 运行测试时,我仍然遇到相同的错误,但是,我可以看到在 target/ 中生成了一个 web/ 文件夹,其中包含一个文件夹 test/,其中包含我在项目中具有正确文件夹结构的所有资产. 我将此文件夹添加为 IntelliJ 中的资源/测试资源文件夹,但仍然没有成功。我还添加了具有相同结果的公用文件夹。
我真的觉得我越来越接近解决方案了。事实上,我尝试了很多东西,发现如果我删除 sbt-rjs 插件(即 RequireJS),在 dev(激活器运行)中运行代码会崩溃并出现相同的错误。我还没有为我的 JS 文件设置 RequireJS(添加 main.js 文件),除非我真的需要它,否则我不想这样做,除非它解决了我的问题。有什么想法吗?