On Thu, Sep 10, 2009 at 8:06 AM, Timothy Perrett <[email protected]>wrote:

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

You mean I have to do real work... sigh... ;-)


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


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