2015-06-20 2 views
0

Вот код (от Lift Framework Cookbook):Specs2 не может видеть определенный класс в лифте

package code.snippet 

import scala.xml.Text 
import net.liftweb.util.Helpers._ 

/** 
* Created by kaiyin on 20/06/15. 
*/ 
class Animals { 
    def list = { 
    val animals = List(
     ("Dog", "(Canis lupus)"), 
     ("Cat", "(Felis catus)"), 
     ("Giraffe", "(Giraffa camelopardalis)"), 
     ("Lion", "(Panthera leo)"), 
     ("Horse", "(Equus ferus caballus)") 
    ) 
    "li *" #> animals.map{ 
     a => 
     ".name *" #> Text(a._1) & 
     ".sname *" #> Text(a._2) 
    } 
    } 
} 

package code.snippet 

/** 
* Created by kaiyin on 20/06/15. 
*/ 

import org.specs2.mutable._ 

class AnimalsSpec extends Specification { 
    "Animals list" should { 
    "contains 5 animals" in { 

     val result = <ul> 
     <li><span class="name">Dog</span> - <span class="sname">(Canis lupus familiaris)</span> </li> 
     <li><span class="name">Cat</span> - <span class="sname">(Felis catus)</span></li> 
     <li><span class="name">Giraffe</span> - <span class="sname">(Giraffa camelopardalis)</span></li> 
     <li><span class="name">Lion</span> - <span class="sname">(Panthera leo)</span></li> 
     <li><span class="name">Horse</span> - <span class="sname">(Equus ferus caballus)</span></li> 
     </ul> 

     val nodeSeq = Animals.list(<ul><li><span class="name"></span> - <span class="sname"></span></li></ul>) 
     nodeSeq.toString must ==/ (result) 
//  result.toString must ==/ (result.toString) 
    } 
// "trivial" in { 
//  "what" must ==/ ("what") 
// } 
    } 
} 

Когда я test в SBT, я получил ошибку:

[error] /private/tmp/lift-lift_26_sbt-d71cccf/scala_211/contacts-app/src/test/scala/code/snippet/AnimalsSpec.scala:21: not found: value Animals 
[error]  val nodeSeq = Animals.list(<ul><li><span class="name"></span> - <span class="sname"></span></li></ul>) 
[error]     ^
[error] one error found 
[error] (test:compile) Compilation failed 
[error] Total time: 0 s, completed Jun 21, 2015 12:14:12 AM 

Кажется, specs2 не может распознать существование класса Animals.

структура каталогов:

. 
├── build.sbt 
├── console.devmode.log 
├── project 
│   ├── build.properties 
│   ├── plugins.sbt 
│   ├── project 
│   │   └── target 
│   │    └── config-classes 
│   │     ├── $3e6a7b084670fb8947b9$.class 
│   │     ├── $3e6a7b084670fb8947b9.cache 
│   │     ├── $3e6a7b084670fb8947b9.class 
│   │     ├── $8ee94f9a958d7b2659d3$.class 
│   │     ├── $8ee94f9a958d7b2659d3.cache 
│   │     ├── $8ee94f9a958d7b2659d3.class 
│   │     ├── $f7c7d83ab25f0dfdaa50$.class 
│   │     ├── $f7c7d83ab25f0dfdaa50.cache 
│   │     └── $f7c7d83ab25f0dfdaa50.class 
│   └── target 
│    ├── config-classes 
│    │   ├── $0849881d22cdcd44948f$$anonfun$$sbtdef$1.class 
│    │   ├── $0849881d22cdcd44948f$.class 
│    │   ├── $0849881d22cdcd44948f.cache 
│    │   ├── $0849881d22cdcd44948f.class 
│    │   ├── $249c304e0f040361c72d$$anonfun$$sbtdef$1.class 
│    │   ├── $249c304e0f040361c72d$.class 
│    │   ├── $249c304e0f040361c72d.cache 
│    │   ├── $249c304e0f040361c72d.class 
│    │   ├── $2a1513b04e5e84f6d714$$anonfun$$sbtdef$1.class 
│    │   ├── $2a1513b04e5e84f6d714$.class 
│    │   ├── $2a1513b04e5e84f6d714.cache 
│    │   ├── $2a1513b04e5e84f6d714.class 
│    │   ├── $3067d2a3c14aabb8a3f0$$anonfun$$sbtdef$1.class 
│    │   ├── $3067d2a3c14aabb8a3f0$.class 
│    │   ├── $3067d2a3c14aabb8a3f0.cache 
│    │   ├── $3067d2a3c14aabb8a3f0.class 
│    │   ├── $3a0715de5358d1f4e97f$$anonfun$$sbtdef$1.class 
│    │   ├── $3a0715de5358d1f4e97f$.class 
│    │   ├── $3a0715de5358d1f4e97f.cache 
│    │   ├── $3a0715de5358d1f4e97f.class 
│    │   ├── $86ef5cf155e942bdbe26$$anonfun$$sbtdef$1.class 
│    │   ├── $86ef5cf155e942bdbe26$.class 
│    │   ├── $86ef5cf155e942bdbe26.cache 
│    │   ├── $86ef5cf155e942bdbe26.class 
│    │   ├── $9696ca6e6d83674bcec7$$anonfun$$sbtdef$1.class 
│    │   ├── $9696ca6e6d83674bcec7$.class 
│    │   ├── $9696ca6e6d83674bcec7.cache 
│    │   ├── $9696ca6e6d83674bcec7.class 
│    │   ├── $99247c8be4b0760fec21$$anonfun$$sbtdef$1.class 
│    │   ├── $99247c8be4b0760fec21$.class 
│    │   ├── $99247c8be4b0760fec21.cache 
│    │   ├── $99247c8be4b0760fec21.class 
│    │   ├── $ad1c698366eb4866d3f8$$anonfun$$sbtdef$1.class 
│    │   ├── $ad1c698366eb4866d3f8$.class 
│    │   ├── $ad1c698366eb4866d3f8.cache 
│    │   ├── $ad1c698366eb4866d3f8.class 
│    │   ├── $b5fc3f4c63982e743df0$$anonfun$$sbtdef$1.class 
│    │   ├── $b5fc3f4c63982e743df0$.class 
│    │   ├── $b5fc3f4c63982e743df0.cache 
│    │   ├── $b5fc3f4c63982e743df0.class 
│    │   ├── $cec870caf77a892e02d5$$anonfun$$sbtdef$1$$anonfun$apply$1.class 
│    │   ├── $cec870caf77a892e02d5$$anonfun$$sbtdef$1.class 
│    │   ├── $cec870caf77a892e02d5$.class 
│    │   ├── $cec870caf77a892e02d5.cache 
│    │   ├── $cec870caf77a892e02d5.class 
│    │   ├── $e22cedfd25e30fceaff3$.class 
│    │   ├── $e22cedfd25e30fceaff3.cache 
│    │   ├── $e22cedfd25e30fceaff3.class 
│    │   ├── $e73abf325c03d09873ef$$anonfun$$sbtdef$1.class 
│    │   ├── $e73abf325c03d09873ef$.class 
│    │   ├── $e73abf325c03d09873ef.cache 
│    │   └── $e73abf325c03d09873ef.class 
│    ├── resolution-cache 
│    │   ├── default 
│    │   │   └── contacts-app-build 
│    │   │    └── scala_2.10 
│    │   │     └── sbt_0.13 
│    │   │      └── 0.1-SNAPSHOT 
│    │   │       ├── resolved.xml.properties 
│    │   │       └── resolved.xml.xml 
│    │   └── reports 
│    │    ├── default-contacts-app-build-compile-internal.xml 
│    │    ├── default-contacts-app-build-compile.xml 
│    │    ├── default-contacts-app-build-docs.xml 
│    │    ├── default-contacts-app-build-optional.xml 
│    │    ├── default-contacts-app-build-plugin.xml 
│    │    ├── default-contacts-app-build-pom.xml 
│    │    ├── default-contacts-app-build-provided.xml 
│    │    ├── default-contacts-app-build-runtime-internal.xml 
│    │    ├── default-contacts-app-build-runtime.xml 
│    │    ├── default-contacts-app-build-scala-tool.xml 
│    │    ├── default-contacts-app-build-sources.xml 
│    │    ├── default-contacts-app-build-test-internal.xml 
│    │    ├── default-contacts-app-build-test.xml 
│    │    ├── ivy-report.css 
│    │    └── ivy-report.xsl 
│    ├── scala-2.10 
│    │   └── sbt-0.13 
│    └── streams 
│     ├── $global 
│     │   ├── $global 
│     │   │   └── $global 
│     │   │    └── out 
│     │   ├── ivyConfiguration 
│     │   │   └── $global 
│     │   │    └── out 
│     │   ├── ivySbt 
│     │   │   └── $global 
│     │   │    └── out 
│     │   ├── projectDescriptors 
│     │   │   └── $global 
│     │   │    └── out 
│     │   └── update 
│     │    └── $global 
│     │     ├── inputs 
│     │     ├── out 
│     │     └── output 
│     ├── compile 
│     │   ├── $global 
│     │   │   └── $global 
│     │   │    └── data 
│     │   ├── compile 
│     │   │   └── $global 
│     │   │    ├── export 
│     │   │    └── out 
│     │   ├── copyResources 
│     │   │   └── $global 
│     │   │    ├── copy-resources 
│     │   │    └── out 
│     │   ├── definedSbtPlugins 
│     │   │   └── $global 
│     │   │    └── out 
│     │   ├── dependencyClasspath 
│     │   │   └── $global 
│     │   │    └── export 
│     │   ├── exportedProducts 
│     │   │   └── $global 
│     │   │    └── export 
│     │   ├── externalDependencyClasspath 
│     │   │   └── $global 
│     │   │    └── export 
│     │   ├── incCompileSetup 
│     │   │   └── $global 
│     │   ├── internalDependencyClasspath 
│     │   │   └── $global 
│     │   │    └── export 
│     │   ├── managedClasspath 
│     │   │   └── $global 
│     │   │    └── export 
│     │   ├── unmanagedClasspath 
│     │   │   └── $global 
│     │   │    └── export 
│     │   └── unmanagedJars 
│     │    └── $global 
│     │     └── export 
│     └── runtime 
│      ├── dependencyClasspath 
│      │   └── $global 
│      │    └── export 
│      ├── exportedProducts 
│      │   └── $global 
│      │    └── export 
│      ├── externalDependencyClasspath 
│      │   └── $global 
│      │    └── export 
│      ├── fullClasspath 
│      │   └── $global 
│      │    └── export 
│      ├── internalDependencyClasspath 
│      │   └── $global 
│      │    └── export 
│      ├── managedClasspath 
│      │   └── $global 
│      │    └── export 
│      ├── unmanagedClasspath 
│      │   └── $global 
│      │    └── export 
│      └── unmanagedJars 
│       └── $global 
│        └── export 
├── sbt 
├── sbt-launch-0.13.1.jar 
├── sbt.bat 
├── src 
│   ├── main 
│   │   ├── resources 
│   │   │   ├── logback.xml 
│   │   │   ├── props 
│   │   │   │   └── default.props 
│   │   │   ├── resources.properties 
│   │   │   ├── resources_de.properties 
│   │   │   └── resources_fr_FR.properties 
│   │   ├── scala 
│   │   │   ├── bootstrap 
│   │   │   │   └── liftweb 
│   │   │   │    └── Boot.scala 
│   │   │   └── code 
│   │   │    ├── comet 
│   │   │    ├── lib 
│   │   │    │   └── SendEmail.scala 
│   │   │    ├── model 
│   │   │    ├── snippet 
│   │   │    │   ├── Animals.scala 
│   │   │    │   ├── Calculator.scala 
│   │   │    │   ├── EmailSnippet.scala 
│   │   │    │   ├── HelloWorld.scala 
│   │   │    │   ├── Inner.scala 
│   │   │    │   ├── ListUser.scala 
│   │   │    │   ├── Localization.scala 
│   │   │    │   ├── Outer.scala 
│   │   │    │   └── Table.scala 
│   │   │    └── view 
│   │   └── webapp 
│   │    ├── WEB-INF 
│   │    │   └── web.xml 
│   │    ├── contacts 
│   │    │   ├── create.html 
│   │    │   ├── delete.html 
│   │    │   ├── edit.html 
│   │    │   ├── list.html 
│   │    │   └── view.html 
│   │    ├── images 
│   │    │   └── ajax-loader.gif 
│   │    ├── index.html 
│   │    ├── send.html 
│   │    ├── static 
│   │    │   └── index.html 
│   │    └── templates-hidden 
│   │     ├── default.html 
│   │     └── wizard-all.html 
│   └── test 
│    ├── resources 
│    │   └── logback-test.xml 
│    └── scala 
│     ├── RunWebApp.scala 
│     └── code 
│      └── snippet 
│       └── AnimalsSpec.scala 
└── target 
    ├── resolution-cache 
    │   ├── net.liftweb 
    │   │   └── lift-2-6-starter-template_2.11 
    │   │    └── 0.0.4 
    │   │     ├── resolved.xml.properties 
    │   │     └── resolved.xml.xml 
    │   └── reports 
    │    ├── ivy-report.css 
    │    ├── ivy-report.xsl 
    │    ├── net.liftweb-lift-2-6-starter-template_2.11-compile-internal.xml 
    │    ├── net.liftweb-lift-2-6-starter-template_2.11-compile.xml 
    │    ├── net.liftweb-lift-2-6-starter-template_2.11-container.xml 
    │    ├── net.liftweb-lift-2-6-starter-template_2.11-docs.xml 
    │    ├── net.liftweb-lift-2-6-starter-template_2.11-optional.xml 
    │    ├── net.liftweb-lift-2-6-starter-template_2.11-plugin.xml 
    │    ├── net.liftweb-lift-2-6-starter-template_2.11-pom.xml 
    │    ├── net.liftweb-lift-2-6-starter-template_2.11-provided.xml 
    │    ├── net.liftweb-lift-2-6-starter-template_2.11-runtime-internal.xml 
    │    ├── net.liftweb-lift-2-6-starter-template_2.11-runtime.xml 
    │    ├── net.liftweb-lift-2-6-starter-template_2.11-scala-tool.xml 
    │    ├── net.liftweb-lift-2-6-starter-template_2.11-sources.xml 
    │    ├── net.liftweb-lift-2-6-starter-template_2.11-test-internal.xml 
    │    └── net.liftweb-lift-2-6-starter-template_2.11-test.xml 
    ├── scala-2.11 
    │   ├── classes 
    │   │   ├── bootstrap 
    │   │   │   └── liftweb 
    │   │   │    ├── Boot$$anonfun$1.class 
    │   │   │    ├── Boot$$anonfun$10.class 
    │   │   │    ├── Boot$$anonfun$11.class 
    │   │   │    ├── Boot$$anonfun$12.class 
    │   │   │    ├── Boot$$anonfun$13.class 
    │   │   │    ├── Boot$$anonfun$14.class 
    │   │   │    ├── Boot$$anonfun$15.class 
    │   │   │    ├── Boot$$anonfun$2$$anonfun$apply$mcZ$sp$1.class 
    │   │   │    ├── Boot$$anonfun$2$$anonfun$apply$mcZ$sp$2.class 
    │   │   │    ├── Boot$$anonfun$2.class 
    │   │   │    ├── Boot$$anonfun$3.class 
    │   │   │    ├── Boot$$anonfun$4.class 
    │   │   │    ├── Boot$$anonfun$5.class 
    │   │   │    ├── Boot$$anonfun$6.class 
    │   │   │    ├── Boot$$anonfun$7.class 
    │   │   │    ├── Boot$$anonfun$8.class 
    │   │   │    ├── Boot$$anonfun$9.class 
    │   │   │    ├── Boot$$anonfun$boot$1.class 
    │   │   │    ├── Boot$$anonfun$boot$2.class 
    │   │   │    ├── Boot$$anonfun$boot$3.class 
    │   │   │    ├── Boot$$anonfun$configureMailer$1$$anonfun$apply$1$$anon$1.class 
    │   │   │    ├── Boot$$anonfun$configureMailer$1$$anonfun$apply$1.class 
    │   │   │    ├── Boot$$anonfun$configureMailer$1.class 
    │   │   │    └── Boot.class 
    │   │   ├── code 
    │   │   │   ├── lib 
    │   │   │   │   ├── SendEmail$.class 
    │   │   │   │   └── SendEmail.class 
    │   │   │   └── snippet 
    │   │   │    ├── Animals$$anonfun$list$1$$anonfun$apply$1$$anonfun$apply$2.class 
    │   │   │    ├── Animals$$anonfun$list$1$$anonfun$apply$1$$anonfun$apply$3.class 
    │   │   │    ├── Animals$$anonfun$list$1$$anonfun$apply$1.class 
    │   │   │    ├── Animals$$anonfun$list$1.class 
    │   │   │    ├── Animals.class 
    │   │   │    ├── Calculator$$anonfun$plus$1.class 
    │   │   │    ├── Calculator.class 
    │   │   │    ├── EmailSnippet$$anonfun$sendEmail$1$$anonfun$apply$1.class 
    │   │   │    ├── EmailSnippet$$anonfun$sendEmail$1.class 
    │   │   │    ├── EmailSnippet$$anonfun$sendNow$1.class 
    │   │   │    ├── EmailSnippet.class 
    │   │   │    ├── HelloWorld$$anonfun$howdy$1.class 
    │   │   │    ├── HelloWorld.class 
    │   │   │    ├── Inner$$anonfun$logged$1.class 
    │   │   │    ├── Inner$$anonfun$nonlogged$1.class 
    │   │   │    ├── Inner.class 
    │   │   │    ├── ListUser$$anonfun$list$1.class 
    │   │   │    ├── ListUser$$anonfun$list$2$$anonfun$apply$1.class 
    │   │   │    ├── ListUser$$anonfun$list$2.class 
    │   │   │    ├── ListUser$$anonfun$log$1.class 
    │   │   │    ├── ListUser$$anonfun$log$2.class 
    │   │   │    ├── ListUser$$anonfun$log$3.class 
    │   │   │    ├── ListUser.class 
    │   │   │    ├── Localization$$anonfun$dynamic$1.class 
    │   │   │    ├── Localization.class 
    │   │   │    ├── Outer$$anonfun$1.class 
    │   │   │    ├── Outer$$anonfun$choose$1.class 
    │   │   │    ├── Outer$$anonfun$choose$2.class 
    │   │   │    ├── Outer.class 
    │   │   │    ├── Table$$anonfun$1$$anonfun$apply$1.class 
    │   │   │    ├── Table$$anonfun$1.class 
    │   │   │    ├── Table$$anonfun$dynamic$1.class 
    │   │   │    ├── Table$$anonfun$dynamic$2.class 
    │   │   │    ├── Table$$anonfun$dynamic$3$$anonfun$apply$2$$anonfun$apply$3.class 
    │   │   │    ├── Table$$anonfun$dynamic$3$$anonfun$apply$2$$anonfun$apply$4.class 
    │   │   │    ├── Table$$anonfun$dynamic$3$$anonfun$apply$2.class 
    │   │   │    ├── Table$$anonfun$dynamic$3.class 
    │   │   │    └── Table.class 
    │   │   ├── logback.xml 
    │   │   ├── props 
    │   │   │   └── default.props 
    │   │   ├── resources.properties 
    │   │   ├── resources_de.properties 
    │   │   └── resources_fr_FR.properties 
    │   └── test-classes 
    │    ├── RunWebApp$.class 
    │    ├── RunWebApp$delayedInit$body.class 
    │    ├── RunWebApp.class 
    │    ├── WEB-INF 
    │    │   └── web.xml 
    │    ├── code 
    │    │   └── snippet 
    │    │    ├── AnimalsSpec$$anonfun$1$$anonfun$apply$1$$anonfun$apply$2.class 
    │    │    ├── AnimalsSpec$$anonfun$1$$anonfun$apply$1$$anonfun$apply$3.class 
    │    │    ├── AnimalsSpec$$anonfun$1$$anonfun$apply$1.class 
    │    │    ├── AnimalsSpec$$anonfun$1$$anonfun$apply$4$$anonfun$apply$5.class 
    │    │    ├── AnimalsSpec$$anonfun$1$$anonfun$apply$4$$anonfun$apply$6.class 
    │    │    ├── AnimalsSpec$$anonfun$1$$anonfun$apply$4.class 
    │    │    ├── AnimalsSpec$$anonfun$1.class 
    │    │    └── AnimalsSpec.class 
    │    ├── contacts 
    │    │   ├── create.html 
    │    │   ├── delete.html 
    │    │   ├── edit.html 
    │    │   ├── list.html 
    │    │   └── view.html 
    │    ├── images 
    │    │   └── ajax-loader.gif 
    │    ├── index.html 
    │    ├── logback-test.xml 
    │    ├── send.html 
    │    ├── static 
    │    │   └── index.html 
    │    └── templates-hidden 
    │     ├── default.html 
    │     └── wizard-all.html 
    ├── specs2-reports 
    │   └── stats 
    │    └── code.snippet.AnimalsSpec.stats 
    └── streams 
     ├── $global 
     │   ├── $global 
     │   │   └── $global 
     │   │    └── out 
     │   ├── ivyConfiguration 
     │   │   └── $global 
     │   │    └── out 
     │   ├── ivySbt 
     │   │   └── $global 
     │   │    └── out 
     │   ├── projectDescriptors 
     │   │   └── $global 
     │   │    └── out 
     │   └── update 
     │    └── $global 
     │     ├── inputs 
     │     ├── out 
     │     └── output 
     ├── compile 
     │   ├── $global 
     │   │   └── $global 
     │   │    └── data 
     │   ├── compile 
     │   │   └── $global 
     │   │    ├── export 
     │   │    └── out 
     │   ├── copyResources 
     │   │   └── $global 
     │   │    ├── copy-resources 
     │   │    └── out 
     │   ├── dependencyClasspath 
     │   │   └── $global 
     │   │    └── export 
     │   ├── exportedProducts 
     │   │   └── $global 
     │   │    └── export 
     │   ├── externalDependencyClasspath 
     │   │   └── $global 
     │   │    └── export 
     │   ├── incCompileSetup 
     │   │   └── $global 
     │   │    └── inc_compile 
     │   ├── internalDependencyClasspath 
     │   │   └── $global 
     │   │    └── export 
     │   ├── managedClasspath 
     │   │   └── $global 
     │   │    └── export 
     │   ├── unmanagedClasspath 
     │   │   └── $global 
     │   │    └── export 
     │   └── unmanagedJars 
     │    └── $global 
     │     └── export 
     ├── container 
     │   └── $global 
     │    └── $global 
     │     └── data 
     ├── runtime 
     │   ├── dependencyClasspath 
     │   │   └── $global 
     │   │    └── export 
     │   ├── exportedProducts 
     │   │   └── $global 
     │   │    └── export 
     │   ├── externalDependencyClasspath 
     │   │   └── $global 
     │   │    └── export 
     │   ├── fullClasspath 
     │   │   └── $global 
     │   │    └── export 
     │   ├── internalDependencyClasspath 
     │   │   └── $global 
     │   │    └── export 
     │   ├── managedClasspath 
     │   │   └── $global 
     │   │    └── export 
     │   ├── unmanagedClasspath 
     │   │   └── $global 
     │   │    └── export 
     │   └── unmanagedJars 
     │    └── $global 
     │     └── export 
     └── test 
      ├── $global 
      │   └── $global 
      │    └── data 
      ├── compile 
      │   └── $global 
      │    ├── export 
      │    └── out 
      ├── copyResources 
      │   └── $global 
      │    ├── copy-resources 
      │    └── out 
      ├── definedTests 
      │   └── $global 
      │    └── out 
      ├── dependencyClasspath 
      │   └── $global 
      │    └── export 
      ├── exportedProducts 
      │   └── $global 
      │    └── export 
      ├── externalDependencyClasspath 
      │   └── $global 
      │    └── export 
      ├── fullClasspath 
      │   └── $global 
      │    └── export 
      ├── incCompileSetup 
      │   └── $global 
      │    └── inc_compile 
      ├── internalDependencyClasspath 
      │   └── $global 
      │    └── export 
      ├── loadedTestFrameworks 
      │   └── $global 
      │    └── out 
      ├── managedClasspath 
      │   └── $global 
      │    └── export 
      ├── test 
      │   ├── $global 
      │   │   ├── out 
      │   │   └── succeeded_tests 
      │   └── isModule=false\ name=code.snippet.AnimalsSpec 
      │    └── out 
      ├── unmanagedClasspath 
      │   └── $global 
      │    └── export 
      └── unmanagedJars 
       └── $global 
        └── export 

204 directories, 304 files 

ответ

2

Не сидит с компилятором в данный момент, но не следует использовать new как это класс, а не объект?

val nodeSeq = Animals.list(...) 

Должно быть

val nodeSeq = new Animals.list(...) 

Или вы можете изменить class Animals в object Animals.

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