Comments (7)
Yep, I've just reproduced that.
I think it doesn't as the first time you mock a method with
helper.registerAllowedMethod("bScript", [], {c -> 'foo'})
or whatever this particular object appears in the groovyClassPath
When you call def script = loadScript("template/pipeline/template.groovy")
to load your pipeline at this point classPath is updated again with the object defined in your lib. So I suppose your mock is overwritten.
So the workaround here is to wrap the pipeline body in a method, like someMethod
:
@Library("commons")
import java.io.File // or whatever
echo aScript() // this is not mocked
def someMethod() {
echo aScript() // this one could be mocked
}
return this
Then your test could be like:
@Test
void mock_bscript() throws Exception {
helper.registerAllowedMethod("bScript", [], {'foo'}) // this one doesn't work
def script = loadScript("template/pipeline/template.groovy")
helper.registerAllowedMethod("bScript", [], {'ololo'}) // this does
script.someMethod()
printCallStack()
}
So the call stack would be
Loading shared library jenkins-commons with version master
template.run()
template.aScript()
aScript.bScript()
template.echo(bar)
template.someMethod()
template.aScript()
aScript.bScript()
template.echo(ololo)
from jenkinspipelineunit.
getBinding().setVariable("bScript", new Object() {
public void call() {
// your mocked behaviour
}
});
from jenkinspipelineunit.
it didnt worked
it is executing bScript(),
deatail is added https://stackoverflow.com/questions/45142634/mock-groovy-script-using-spock
from jenkinspipelineunit.
I think your repository has a wrong layout.
I believe aScript
and bScript
should be stored in var[s]
not in var
folder
from jenkinspipelineunit.
sorry that was my typo mistake ,actually both are in the vars folder..
my project structure,
app
|--build
|--classes
|--test
|--aScriptSpec.class
|--resources
|--test
|--lib
|--commons@master
|--vars
|-- aScript.groovy
|--bScript.groovy
|--src/test/groovy
|--aScriptSpec.groovy
|--vars
|--aScript.groovy
|--bScript.groovy
|--build.gradle
|--Jenkinsfile
from jenkinspipelineunit.
All in all I think the impact of this issue is really low. If you test your pipelines
and libs
separately then you can define any pipelines to load your lib with a proper way to make it able to test it
from jenkinspipelineunit.
thanks @headcrabmeat @bguerin
from jenkinspipelineunit.
Related Issues (20)
- mock for build step HOT 3
- NoClassDefFoundError java/lang/Module with 1.15 & 1.16 HOT 3
- JenkinsPipelineUnit - unable to mock getId() called within script block
- Can't access 'env' properties in nested bindings
- Mock method of shared with defaut parameter
- Groovy 7 is not running my test when using gradlew clean test HOT 4
- Stack overflow in tests; possible to disable interception for a class? HOT 1
- document addParam HOT 1
- How to mock object creation?
- Jenkins shared library unit tests - missing dependencies and assert singleton values HOT 1
- post-unsuccessful action is not executed for parallel stage when a substage fails
- Is it possible to run unit tests over a Jenkinsfile in a remote git repo? HOT 8
- Performance: Cross-test caching of loaded scripts HOT 3
- Mocking different return values for a method the second time it is called HOT 3
- Accessing constant from another file
- Defining environment variables is not clear HOT 1
- Custom method added with registerAllowedMethod is not being utilized. HOT 13
- Why are call stack items indented with 3 spaces? HOT 2
- Specify a way to add helper.registerAllowedMethod("readYaml") as per the stage HOT 4
- How to setup an initial gradle process HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from jenkinspipelineunit.