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