Hi Ryan, David, Eric, I added a ScalaTest version to your wiki page:
http://wiki.github.com/dpp/liftweb/how-to-unit-test-lift-snippets-with-a-logged-in-user Eric you may want to add a specs version. Bill On Thu, Oct 1, 2009 at 3:03 PM, rstradling <[email protected]> wrote: > > Awesome!!! Thanks guys for the help. It now works. > > I put a how-to wiki document up on github. For me this was one of > those times where my google searches did not seem to turn up anything > fruitful, so I thought this how-to would be helpful. If it is not > helpful, then no hard feelings if the page is deleted. I just wanted > to give back. > > Wiki page > http://wiki.github.com/dpp/liftweb/how-to-unit-test-lift-snippets-with-a-logged-in-user > > > > > On Oct 1, 4:53 pm, David Pollak <[email protected]> wrote: >> Bill, >> Thanks for posting this. I am, by experience (I started using it, I can use >> it enough to write basic tests, I know no more) using Specs. I would >> welcome and encourage some sample tests in Lift archetypes that use >> ScalaTest. I want to make sure that folks who pick up Lift get to >> experience ScalaTest as well as Specs... that way, folks who have a better >> understanding of tests can make better choices. >> >> Thanks, >> >> David >> >> >> >> On Thu, Oct 1, 2009 at 1:27 PM, Bill Venners <[email protected]> wrote: >> >> > Hi Ryan, >> >> > It looks like you're currently using a JUnit TestCase. If you want an >> > easier port to something that would work you could use a ScalaTest >> > Suite like this: >> >> > import org.scalatest.Suite >> >> > class YourSuite extends Suite { >> >> > val session = new LiftSession("", randomString(20), Empty) >> > val stableTime = now >> >> > override def withFixture(test: NoArgTest) { >> >> > S.initIfUninitted(session) { >> > val user = User.create >> > user.firstName("XXX") >> > user.lastName("YYY") >> > user.save >> > User.logUserIn(user) >> > test() >> > } >> > } >> >> > def testValue() { >> > val xml = >> > <xml:group> >> > <tr> >> > <td> >> > <p:fullName>My Name</p:fullName> >> > </td> >> > <td> >> > <p:style>Fighter Style</p:style> >> > </td> >> > <td> >> > <p:weight>Weight</p:weight> >> > </td> >> > </tr> >> > </xml:group> >> > val trainer = new Trainer() >> > val output = trainer.showPeople(xml) >> > // seems like you need an assertion here... >> > } >> > } >> >> > A Suite considers methods that start with "test" as tests, like JUnit >> > 3, except they don't need to result in Unit so you don't need an extra >> > () at the end. The withFixture method is an alternative to >> > beforeEach/afterEach, which are like JUnit 3's setUp/tearDown methods. >> > Each test gets passed as a function to withFixture, which is >> > responsible for executing the test by invoking the function. In this >> > case, it is executed in the context created by S. initIfUninitted. >> > This is ScalaTest 1.0, which is available as a SNAPSHOT right now but >> > should be released proper a week from Monday. >> >> >http://www.artima.com/scalatest >> >> > Bill >> >> > On Thu, Oct 1, 2009 at 9:50 AM, David Pollak >> > <[email protected]> wrote: >> > > Using Specs 1.6: >> >> > > object HelloWorldTestSpecs extends Specification { >> > > val session = new LiftSession("", randomString(20), Empty) >> > > val stableTime = now >> > > override def executeExpectations(ex: Examples, t: =>Any): Any = { >> > > S.initIfUninitted(session) { >> > > ... put your User init here. The User.logUserIn will be within the >> > > context of a session and thus session (and request) vars will be valid >> > > } >> > > } >> > > "HelloWorld Snippet" should { >> > > "Put the time in the node" in { >> > > ... do testing here >> > > } >> > > } >> > > } >> >> > > Hope this helps. >> > > On Thu, Oct 1, 2009 at 8:55 AM, rstradling <[email protected]> >> > wrote: >> >> > >> I have a class called >> > >> class Trainer { >> > >> def showPeople(xhtml : Group) : NodeSeq = { >> > >> val user : User = User.currentUser.open_! >> > >> ... >> > >> } >> > >> } >> >> > >> I then want to write a unit test to test that returns proper xml. >> >> > >> The test is written as so >> > >> def testValue() = { >> > >> val xml = >> > >> <xml:group> >> > >> <tr> >> > >> <td> >> > >> <p:fullName>My Name</p:fullName> >> > >> </td> >> > >> <td> >> > >> <p:style>Fighter Style</p:style> >> > >> </td> >> > >> <td> >> > >> <p:weight>Weight</p:weight> >> > >> </td> >> > >> </tr> >> > >> </xml:group> >> > >> val trainer = new Trainer() >> > >> val output = trainer.showPeople(xml) >> > >> () >> > >> } >> >> > >> The User object inherits from MegaProtoUser. >> >> > >> The problem is I am not sure how to create a mock user and sign them >> > >> in. >> > >> I have tried in my unit test >> > >> override def setUp : Unit = { >> > >> val user = User.create >> > >> user.firstName("XXX") >> > >> user.lastName("YYY") >> > >> user.save >> > >> User.logUserIn(user) >> > >> } >> >> > >> The mock user log-in *seems* to work fine but when >> > >> User.currentUser.open_! is called it throws an exception on trying to >> > >> open an empty box. >> >> > >> So either how do I do this or how do others do this type of testing. >> > >> I am sure I am missing something simple. >> >> > >> Thanks, >> > >> ryan >> >> > > -- >> > > Lift, the simply functional web frameworkhttp://liftweb.net >> > > Beginning Scalahttp://www.apress.com/book/view/1430219890 >> > > Follow me:http://twitter.com/dpp >> > > Surf the harmonics >> >> > -- >> > Bill Venners >> > Artima, Inc. >> >http://www.artima.com >> >> -- >> Lift, the simply functional web frameworkhttp://liftweb.net >> Beginning Scalahttp://www.apress.com/book/view/1430219890 >> Follow me:http://twitter.com/dpp >> Surf the harmonics > > > > -- Bill Venners Artima, Inc. http://www.artima.com --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---
