David,

Im reading this, understanding it, and thinking that it would be great  
if it could be written up into a wiki article explaining all the stuff  
you added in your recent commits (there appear to be a bunch of files  
and i've not yet looked at the impl)

Cheers, Tim

On 10 Sep 2009, at 02:35, David Pollak 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 framework http://liftweb.net
> Beginning Scala http://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