Search code examples
grailsmockingintegration-testinggrails-2.2

No call to expected at this point. Still 1 call(s) to expected error


In the integration test, i am using groovy mock feature to mock a service method like shown below:

def mock = new groovy.mock.interceptor.MockFor(PaymentService)

mock.demand.processPayment(){ a, b, c-> ['status': true, 'approved': true, 'tresponse':  new TransactionResponse(amount: total.toBigDecimal(), transactionId: "4234234555", saleId: Sale.last().id, responseCode: "1", responseReasonCode: "1", responseReasonText: "approved", authorizationCode: "asdasd", paymentMethod: "CC", transactionType: "auth_capture", cardCodeResponse: "P").save(flush: true)]}


mock.use{
    controller.paymentService = new PaymentService()

    populateReceiptParams(total)

    controller.receipt()

}

The payment controller method receipt() uses payment service method processPayment which communicates with authorize.net. So i have mocked out this method as shown above.

When the test is run, the error i am getting is as follows

junit.framework.AssertionFailedError: No call to 'getMergedSale' expected at this point. Still 1 call(s) to 'processPayment' expected.
    at PaymentController.cart(PaymentController.groovy:296)
    at PaymentController.receipt(PaymentController.groovy:1096)

So the thing is that inside receipt method there is another call to paymentservice being made

paymentService.getMergedSale([sessionAuth, userAuth])

So does this mean that the mocked method which is processPayment must be called first before getMergedSale? I appreciate any guide as to the reason for this error. Thanks!


Solution

  • So does this mean that the mocked method which is processPayment must be called first before getMergedSale?

    Not necessarily, no. It does mean that you need to provide a mocked implementation of getMergedSale.