anchor.diff:               
           } |> Async.RunSynchronously
   
  +    type IntegrationTests () = 
  +        do log4net.Config.XmlConfigurator.ConfigureAndWatch(FileInfo("log4net.config")) |> ignore
  +
  +        [<Fact>]
  +        let ``should call handler when a new job is added`` () = 
  +            let mp = ConnectionMultiplexer.Connect("localhost, allowAdmin=true")
  +            
  +            let queue = Queue<Data>((Guid.NewGuid ()).ToString(), mp.GetDatabase, mp.GetSubscriber)
  +
  +            let newJob = ref false
  +
  +            do queue.``process`` (fun j -> async { newJob := true })
  +            
  +            async {
  +                let! job = queue.add({value = "test"})
  +                do! queue.on.Completed |> Async.AwaitEvent |> Async.Ignore
  +                let! active = queue.getActive()
  +                let! completed = queue.getCompleted()
  +                !newJob |> should be True
  +                (active |> Array.length) |> should equal 0
  +                (completed |> Array.length) |> should equal 1
  +            } |> Async.RunSynchronously
  +
  +        [<Fact>]
  +        let ``should report the correct length of the queue`` () =
  +            let mp = ConnectionMultiplexer.Connect("localhost, allowAdmin=true")
  +            
  +            let queue = Queue<Data>((Guid.NewGuid ()).ToString(), mp.GetDatabase, mp.GetSubscriber)
  +
  +            async {
  +                do! queue.add({ value = "bert1" }) |> Async.Ignore
  +                do! queue.add({ value = "bert2" }) |> Async.Ignore
  +                do! queue.add({ value = "bert3" }) |> Async.Ignore
  +                do! queue.add({ value = "bert4" }) |> Async.Ignore
  +                do! queue.add({ value = "bert5" }) |> Async.Ignore
  +                do! queue.add({ value = "bert6" }) |> Async.Ignore
  +                do! queue.add({ value = "bert7" }) |> Async.Ignore
  +
  +                let! count = queue.count ()
  +                count |> should equal 7L
  +            } |> Async.RunSynchronously
  +
  +        [<Fact>]
  +        let ``should be able to empty the queue`` () =
  +            let mp = ConnectionMultiplexer.Connect("localhost, allowAdmin=true")
  +            
  +            let queue = Queue<Data>((Guid.NewGuid ()).ToString(), mp.GetDatabase, mp.GetSubscriber)
  +
  +            async {
  +                do! queue.add({ value = "bert1" }) |> Async.Ignore
  +                do! queue.add({ value = "bert2" }) |> Async.Ignore
  +                do! queue.add({ value = "bert3" }) |> Async.Ignore
  +                do! queue.add({ value = "bert4" }) |> Async.Ignore
  +                do! queue.add({ value = "bert5" }) |> Async.Ignore
  +                do! queue.add({ value = "bert6" }) |> Async.Ignore
  +                do! queue.add({ value = "bert7" }) |> Async.Ignore
  +
  +                let! count = queue.count () 
  +                count |> should equal 7L
  +                do! queue.empty () |> Async.Ignore
  +                let! empty = queue.count () 
  +                empty |> should equal 0L
  +            } |> Async.RunSynchronously
  
positive.code:         let result = queue.toKey("stuff")
  
          // Then
          result |> should equal "bull:test:stuff"
  
      [<Fact>]
      let ``report progress and listen to event on queue`` () =
  
negative.code:                     d.HashGetAllAsync(any()) --> taskJobHash()
                  @>
              )
              let sub = Mock<ISubscriber>.With(fun s ->
                  <@
                      s.PublishAsync(any(), any(), any()) --> taskLong()
                  @>
              )
  
              let queue = Queue<Data>("stuff", (fun () -> db), (fun () -> sub))
              let! job = queue.add({ value = "test" });
  