You are looking at historical revision 23795 of this page. It may differ significantly from its current revision.

Missbehave

Introduction

Missbehave is a toolkit that allows to you to bring behaviour driven development in the spirit of rspec, to your scheme of choice.

It is very much inspired and mostly modeled after the famous rspec-library.

Examples

(use missbehave miscmacros)

(define (callee . args) 'called)
(define (call-it n)
  (repeat n (callee)))

(describe "Missbehave features"
  (describe "implicit subject"
     (subject-set! 42)
     (it should (be 42))
     (it should (be a number)))
  
         
  (describe "Simple be matchers"
     (it "must be true"
         (expect #t (be true)))
     (it "must be a string"
         (expect "hello" to (be a string)))
     (it "can use standard operators"
         (expect 3 (be > 0)))
     (it "can use predicates"
         (expect '() (be null?))))

  (describe "Pending"
     (it "is implicitly pending")
     (it "is explicitly pending"
         (pending)
         (expect '() (be a number))))         

  (describe "Procedure expectations"
    (context "Application-count"
      (it "checks application count"
          (expect (call-it 1) to (call callee once)))
      (it "checks application count > 1"
          (expect (call-it 4) to (call callee (4 times))))
      (it "checks for no calls"
          (expect (+ 1 1) to (call callee never))))
    (context "Arguments"
     (it "checks arguments"
         (expect (callee 1 2) to (call callee (with 1 2))))
     (it "mixes arguments and application count"
         (expect (begin (callee 1 2) (callee 1 2)) to (call callee (with 1 2) twice)))))


  (describe "Procedure stubs"
    (it "can stub return values"
        (stub! callee (returns 'not-called))
        (expect (callee) to (be 'not-called)))

    (it "provides temporary stubs"
        (let ((proc (lambda () 'test)))
          (expect (proc) to (be 'test))
          (with-stubs! ((proc (returns 'passed)))
            (expect (proc) to (be 'passed)))
          (expect (proc) to (be 'test))))))
<enscript>

Now invoke it with: 

<enscript highlight=raw>
$ behave test-spec.scm

Produces the following output:

Missbehave features
Procedure stubs
  It provides temporary stubs
  It can stub return values
Procedure expectations
Arguments
  It mixes arguments and application count
  It checks arguments
Application-count
  It checks for no calls
  It checks application count > 1
  It checks application count
Pending
  [P] It is explicitly pending
  [P] It is implicitly pending
Simple be matchers
  It can use predicates
  It can use standard operators
  It must be a string
  It must be true
implicit subject
  It should (be a number)
  It should (be 42)


Total: 15 Successful: 13 Pending: 2 Failures: 0

Api

Contexts

Examples

Expectations

Matchers

Builtin Matchers

Hooks