小编典典

资产未在功能测试模式下加载

selenium

我的问题的答案可能非常简单和愚蠢,但到目前为止我自己还找不到。使用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>

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"
)

更新3:

我再次更新了帖子以反映我当前的项目结构和代码(请参见上文)。我修改了代码以使用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文件),并且直到我真正需要它之前都不想这样做,除非它可以解决我的问题。有什么想法吗?


阅读 241

收藏
2020-06-26

共1个答案

小编典典

最后,这是解决此问题的方法。

我将此行添加到我的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的出色评论,这些评论使我对这个解决方案感到满意!

2020-06-26