OK, I've got the lift-archetype-basic working now just as the post
shows.

In pursuit of BDD, I want to test some behavior this way:

1. Set up a 'test' database with a single SuperUser using fields I
know work with password, salt, etc.
2. Sign In as that SuperUser.
3. Sign Up another SuperUser with fields I supply, and send the
verification email.
4. Tear down everything after the tests run, leaving no database.

That's the beginning of the sort of testing I want to use to build my
next app.

Perhaps it's all there already, but it's not obvious to me yet.



On Sep 9, 5:35 pm, David Pollak <[email protected]> wrote:
> Dustin,
> I've updated the Basic archetype to include a couple of things:
>
>    - An example of Lift's new Factory support which blends the best of
>    dependency injection and and highly configurable, type-safe factories
>    - An example of how to set up a session to test a snippet
>    - An example of injecting a test value into the snippet test via the
>    factory
>
> The test that you asked about looks like:
>
> object HelloWorldTestSpecs extends Specification {
>   val session = new LiftSession("", randomString(20), Empty)
>
>   "HelloWorld Snippet" should {
>     "Put the time in the node" in {
>       S.initIfUninitted(session) {
>         val stableTime = now
>         DependencyFactory.time.doWith(stableTime) {
>           val hello = new HelloWorld
>           Thread.sleep(1000) // make sure the time changes
>
>           val str = hello.howdy(<span>Hello at <b:time/></span>).toString
>
>           str.indexOf(stableTime.toString) must be >= 0
>           str.indexOf("Hello at") must be >= 0
>         }
>       }
>     }
>   }
>
> }
>
> This demonstrates creating a mock LiftSession and setting up S with
> "initIfUnitted".
>
> The DepencyFactory.time.doWith sets up a new value to be generated from the
> DepencyFactory.time object (rather than using the global default function,
> the stableTime value is used.)
>
> In the HelloWord snippet, we inject the value of the time object:
>
> class HelloWorld {
>   import DependencyFactory._ // Import the Dependency Injector
>
>   val date = inject[Date] // inject the date
>
>   // lazy val date = DependencyFactory.time.make // create the date via
> factory
>
>   def howdy(in: NodeSeq): NodeSeq =
>     Helpers.bind("b", in, "time" -> date.map(d => Text(d.toString)))
>
> }
>
> Note there are two ways of getting the time.  The inject method will locate
> a Maker for a java.util.Date.  This is a whole lot less (in my opinion)
> optimal than the second option, which explicitly calls the time factory.  In
> either case, the current time Maker (global, session-specific,
> request-specific, and stack-specific) is consulted.
>
> To build the Factory itself:
>
> object DependencyFactory extends Factory {
>   implicit object time extends FactoryMaker(Helpers.now _)
>
> }
>
> I hope this answers you question about testing snippets and more broadly
> addresses some of the recent discussions on the list about Dependency
> Injection, Factories, mocks, and testing.
>
> Thanks,
>
> David
>
> On Wed, Sep 9, 2009 at 1:05 PM, Dustin Whitney 
> <[email protected]>wrote:
>
> > All,
>
> >     I am having trouble finding any literature on how to test a Lift app.
> > I've got a snippet.  I'd like to mock a request and test the NodeSeq that
> > comes back from the render method in my snippet.  Can anyone point me to
> > some code that's doing that?
>
> > Thanks,
> > Dustin
>
> --
> Lift, the simply functional web frameworkhttp://liftweb.net
> Beginning Scalahttp://www.apress.com/book/view/1430219890
> Follow me:http://twitter.com/dpp
> Git some:http://github.com/dpp
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Lift" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/liftweb?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to