jenkins-spock icon indicating copy to clipboard operation
jenkins-spock copied to clipboard

How to test some pipeline steps without mock ?

Open PavelKa opened this issue 5 years ago • 2 comments

Desired Behavior

I have simple class method wich I want to test :

static def getAllProperties(script,configDir,appId ) {
   def envProperties = script.readProperties file:  "${configDir}/env.properties"
    def props =  script.readProperties   default: envProperties ,file: "${configDir}/${appId}/env.properties"
    props
  }

I'm using JenkinsPipelineSpecification to write tests in my project but in this case, readProperties are mocked and test will not detect that I have typo in parameter default. Also, the compiler will not fail. Is it possible to set up a test to fail or somehow configure to really call readProperties step ? Mocking using 1 * getPipelineMock("readProperties")(default:["x":"valueX"],file:"./appId/env.properties") >> ["y" : "valueY"] doesn't help as there is same typo as in the method implementation

Benefits

  1. Detecting such typos during a test is much more efficient than deploy to Jenkins and test manually

PavelKa avatar Apr 27 '21 11:04 PavelKa

I am not quite sure I understand the question. It sounds like you're asking:

Assuming

  1. a function takes in a map of arguments
  2. One of the arguments' names is default

e.g. getAllProperties(default: ["x": "valueX")

Then

I would like a unit-test failure if my code calls this function with a typo, e.g.

getAllProperties(deflat: ["x": "valueX")

Is that correct?

awittha avatar Aug 17 '21 17:08 awittha

Yes, that's what I need. There is method readProperties ( from the "Pipeline Utility Steps plugin") which expects "defaults" on input in my example, but I used "default". The test passes because I also used "default" in the getPipelineMock. I would like to find these types of errors/typos before deploying to Jenkins.

PavelKa avatar Aug 18 '21 07:08 PavelKa