Mocha / Chai - Timeout, ensuring promise resolves
.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty{ height:90px;width:728px;box-sizing:border-box;
}
There's several thousand questions on this and I think I've read all of them but I still don't understand why the following doesn't work.
Locally this code executes without an issue. When run on TravisCI - it fails with the ensure done() is being called error.
it('Function oLab.GetObjects & oLab.Deploy', (done) => {
var l = new oLab('1')
l.getObjects().then(function(data){
console.log(data);
expect(data.length).to.above(0);
//There is a bunch of other code in here commented out since this alone doesn't work.
})
.then(() => done(), done)
.catch(function (err) { }); // Not executed
});
I know the getObjects function is failing:
this.getObjects = function () {
console.log("oLab getObjects function");
return getResources(this.id);
}
which calls getResources:
function getResources(labID){
return db.any('select * from lab_resources where lab_id = ' + labID).then(function(data){
var resources = ;
//Modifies the resources and returns the list. Logging this displays the correct data.
return resources;
})
.catch(function (err) { }); // Not executed
}
Questions:
- I read this blog and based off of it added (done) to my functions as I think I return a promise. Do I return a promise if it is nested? IE I call getObjects followed by getResources. getResources returns a DB query but within that - there is a value returned. Does that mean I'm returning a promise or the value to the calling function? I thought it would return the promise as the promise wouldn't be executed immediately.
- Within getObjects, I'm trying to set a property of oLab. Should I set that property within the getObjects function or should I return that to my calling method and then alter the property of oLab?
javascript node.js mocha chai
|
show 1 more comment
There's several thousand questions on this and I think I've read all of them but I still don't understand why the following doesn't work.
Locally this code executes without an issue. When run on TravisCI - it fails with the ensure done() is being called error.
it('Function oLab.GetObjects & oLab.Deploy', (done) => {
var l = new oLab('1')
l.getObjects().then(function(data){
console.log(data);
expect(data.length).to.above(0);
//There is a bunch of other code in here commented out since this alone doesn't work.
})
.then(() => done(), done)
.catch(function (err) { }); // Not executed
});
I know the getObjects function is failing:
this.getObjects = function () {
console.log("oLab getObjects function");
return getResources(this.id);
}
which calls getResources:
function getResources(labID){
return db.any('select * from lab_resources where lab_id = ' + labID).then(function(data){
var resources = ;
//Modifies the resources and returns the list. Logging this displays the correct data.
return resources;
})
.catch(function (err) { }); // Not executed
}
Questions:
- I read this blog and based off of it added (done) to my functions as I think I return a promise. Do I return a promise if it is nested? IE I call getObjects followed by getResources. getResources returns a DB query but within that - there is a value returned. Does that mean I'm returning a promise or the value to the calling function? I thought it would return the promise as the promise wouldn't be executed immediately.
- Within getObjects, I'm trying to set a property of oLab. Should I set that property within the getObjects function or should I return that to my calling method and then alter the property of oLab?
javascript node.js mocha chai
Having other people read this should be a good reminded why you should have good descriptive names for tests. I can't tell what you testing here with "Function oLab.GetObjects & oLab.Deploy". Usingcatch
and the second callback tothen
is probably a mistake because you will intercept the error generated by a failing test.
– Mark Meyer
Nov 25 '18 at 1:48
@MarkMeyer I have logging in both catch statements and neither of them log thus I didn't think they were executing and why I left them off. I wrote a significantly more complicated test that I've stripped down to this as it was still failing the basic test in TravisCI. If I caught - and logged - the error on the inner function, why is it a bad idea to nest catch statements?
– gbam
Nov 25 '18 at 1:53
You are using both callbacks inthen
withthen(done, done)
The second call back is for errors. Unless you throw in the second call backcatch()
will never happen. It's much easier with mocha to leavedone
out of it and just return the promise.
– Mark Meyer
Nov 25 '18 at 2:00
@MarkMeyer I can understand the rationale for returning the promise however when return l.getObjects() - it timesout which is why I turned to done. I know l.getObjects returns a promise as if I set l.getObjects equal to a variable and log it, it shows promise. I started with returning the promises directly then turned to done() as I couldn't get it to work.
– gbam
Nov 25 '18 at 2:11
You need to make sure you removedone
fromit('Function oLab.GetObjects & oLab.Deploy', (done)
. That's how it knows to look for a promise.
– Mark Meyer
Nov 25 '18 at 2:12
|
show 1 more comment
There's several thousand questions on this and I think I've read all of them but I still don't understand why the following doesn't work.
Locally this code executes without an issue. When run on TravisCI - it fails with the ensure done() is being called error.
it('Function oLab.GetObjects & oLab.Deploy', (done) => {
var l = new oLab('1')
l.getObjects().then(function(data){
console.log(data);
expect(data.length).to.above(0);
//There is a bunch of other code in here commented out since this alone doesn't work.
})
.then(() => done(), done)
.catch(function (err) { }); // Not executed
});
I know the getObjects function is failing:
this.getObjects = function () {
console.log("oLab getObjects function");
return getResources(this.id);
}
which calls getResources:
function getResources(labID){
return db.any('select * from lab_resources where lab_id = ' + labID).then(function(data){
var resources = ;
//Modifies the resources and returns the list. Logging this displays the correct data.
return resources;
})
.catch(function (err) { }); // Not executed
}
Questions:
- I read this blog and based off of it added (done) to my functions as I think I return a promise. Do I return a promise if it is nested? IE I call getObjects followed by getResources. getResources returns a DB query but within that - there is a value returned. Does that mean I'm returning a promise or the value to the calling function? I thought it would return the promise as the promise wouldn't be executed immediately.
- Within getObjects, I'm trying to set a property of oLab. Should I set that property within the getObjects function or should I return that to my calling method and then alter the property of oLab?
javascript node.js mocha chai
There's several thousand questions on this and I think I've read all of them but I still don't understand why the following doesn't work.
Locally this code executes without an issue. When run on TravisCI - it fails with the ensure done() is being called error.
it('Function oLab.GetObjects & oLab.Deploy', (done) => {
var l = new oLab('1')
l.getObjects().then(function(data){
console.log(data);
expect(data.length).to.above(0);
//There is a bunch of other code in here commented out since this alone doesn't work.
})
.then(() => done(), done)
.catch(function (err) { }); // Not executed
});
I know the getObjects function is failing:
this.getObjects = function () {
console.log("oLab getObjects function");
return getResources(this.id);
}
which calls getResources:
function getResources(labID){
return db.any('select * from lab_resources where lab_id = ' + labID).then(function(data){
var resources = ;
//Modifies the resources and returns the list. Logging this displays the correct data.
return resources;
})
.catch(function (err) { }); // Not executed
}
Questions:
- I read this blog and based off of it added (done) to my functions as I think I return a promise. Do I return a promise if it is nested? IE I call getObjects followed by getResources. getResources returns a DB query but within that - there is a value returned. Does that mean I'm returning a promise or the value to the calling function? I thought it would return the promise as the promise wouldn't be executed immediately.
- Within getObjects, I'm trying to set a property of oLab. Should I set that property within the getObjects function or should I return that to my calling method and then alter the property of oLab?
javascript node.js mocha chai
javascript node.js mocha chai
asked Nov 25 '18 at 1:41
gbamgbam
69941129
69941129
Having other people read this should be a good reminded why you should have good descriptive names for tests. I can't tell what you testing here with "Function oLab.GetObjects & oLab.Deploy". Usingcatch
and the second callback tothen
is probably a mistake because you will intercept the error generated by a failing test.
– Mark Meyer
Nov 25 '18 at 1:48
@MarkMeyer I have logging in both catch statements and neither of them log thus I didn't think they were executing and why I left them off. I wrote a significantly more complicated test that I've stripped down to this as it was still failing the basic test in TravisCI. If I caught - and logged - the error on the inner function, why is it a bad idea to nest catch statements?
– gbam
Nov 25 '18 at 1:53
You are using both callbacks inthen
withthen(done, done)
The second call back is for errors. Unless you throw in the second call backcatch()
will never happen. It's much easier with mocha to leavedone
out of it and just return the promise.
– Mark Meyer
Nov 25 '18 at 2:00
@MarkMeyer I can understand the rationale for returning the promise however when return l.getObjects() - it timesout which is why I turned to done. I know l.getObjects returns a promise as if I set l.getObjects equal to a variable and log it, it shows promise. I started with returning the promises directly then turned to done() as I couldn't get it to work.
– gbam
Nov 25 '18 at 2:11
You need to make sure you removedone
fromit('Function oLab.GetObjects & oLab.Deploy', (done)
. That's how it knows to look for a promise.
– Mark Meyer
Nov 25 '18 at 2:12
|
show 1 more comment
Having other people read this should be a good reminded why you should have good descriptive names for tests. I can't tell what you testing here with "Function oLab.GetObjects & oLab.Deploy". Usingcatch
and the second callback tothen
is probably a mistake because you will intercept the error generated by a failing test.
– Mark Meyer
Nov 25 '18 at 1:48
@MarkMeyer I have logging in both catch statements and neither of them log thus I didn't think they were executing and why I left them off. I wrote a significantly more complicated test that I've stripped down to this as it was still failing the basic test in TravisCI. If I caught - and logged - the error on the inner function, why is it a bad idea to nest catch statements?
– gbam
Nov 25 '18 at 1:53
You are using both callbacks inthen
withthen(done, done)
The second call back is for errors. Unless you throw in the second call backcatch()
will never happen. It's much easier with mocha to leavedone
out of it and just return the promise.
– Mark Meyer
Nov 25 '18 at 2:00
@MarkMeyer I can understand the rationale for returning the promise however when return l.getObjects() - it timesout which is why I turned to done. I know l.getObjects returns a promise as if I set l.getObjects equal to a variable and log it, it shows promise. I started with returning the promises directly then turned to done() as I couldn't get it to work.
– gbam
Nov 25 '18 at 2:11
You need to make sure you removedone
fromit('Function oLab.GetObjects & oLab.Deploy', (done)
. That's how it knows to look for a promise.
– Mark Meyer
Nov 25 '18 at 2:12
Having other people read this should be a good reminded why you should have good descriptive names for tests. I can't tell what you testing here with "Function oLab.GetObjects & oLab.Deploy". Using
catch
and the second callback to then
is probably a mistake because you will intercept the error generated by a failing test.– Mark Meyer
Nov 25 '18 at 1:48
Having other people read this should be a good reminded why you should have good descriptive names for tests. I can't tell what you testing here with "Function oLab.GetObjects & oLab.Deploy". Using
catch
and the second callback to then
is probably a mistake because you will intercept the error generated by a failing test.– Mark Meyer
Nov 25 '18 at 1:48
@MarkMeyer I have logging in both catch statements and neither of them log thus I didn't think they were executing and why I left them off. I wrote a significantly more complicated test that I've stripped down to this as it was still failing the basic test in TravisCI. If I caught - and logged - the error on the inner function, why is it a bad idea to nest catch statements?
– gbam
Nov 25 '18 at 1:53
@MarkMeyer I have logging in both catch statements and neither of them log thus I didn't think they were executing and why I left them off. I wrote a significantly more complicated test that I've stripped down to this as it was still failing the basic test in TravisCI. If I caught - and logged - the error on the inner function, why is it a bad idea to nest catch statements?
– gbam
Nov 25 '18 at 1:53
You are using both callbacks in
then
with then(done, done)
The second call back is for errors. Unless you throw in the second call back catch()
will never happen. It's much easier with mocha to leave done
out of it and just return the promise.– Mark Meyer
Nov 25 '18 at 2:00
You are using both callbacks in
then
with then(done, done)
The second call back is for errors. Unless you throw in the second call back catch()
will never happen. It's much easier with mocha to leave done
out of it and just return the promise.– Mark Meyer
Nov 25 '18 at 2:00
@MarkMeyer I can understand the rationale for returning the promise however when return l.getObjects() - it timesout which is why I turned to done. I know l.getObjects returns a promise as if I set l.getObjects equal to a variable and log it, it shows promise. I started with returning the promises directly then turned to done() as I couldn't get it to work.
– gbam
Nov 25 '18 at 2:11
@MarkMeyer I can understand the rationale for returning the promise however when return l.getObjects() - it timesout which is why I turned to done. I know l.getObjects returns a promise as if I set l.getObjects equal to a variable and log it, it shows promise. I started with returning the promises directly then turned to done() as I couldn't get it to work.
– gbam
Nov 25 '18 at 2:11
You need to make sure you remove
done
from it('Function oLab.GetObjects & oLab.Deploy', (done)
. That's how it knows to look for a promise.– Mark Meyer
Nov 25 '18 at 2:12
You need to make sure you remove
done
from it('Function oLab.GetObjects & oLab.Deploy', (done)
. That's how it knows to look for a promise.– Mark Meyer
Nov 25 '18 at 2:12
|
show 1 more comment
1 Answer
1
active
oldest
votes
Turns out Travis CI wasn't able to access the Database I was requesting thus it was failing on the DB connection setup.
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53463969%2fmocha-chai-timeout-ensuring-promise-resolves%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
Turns out Travis CI wasn't able to access the Database I was requesting thus it was failing on the DB connection setup.
add a comment |
Turns out Travis CI wasn't able to access the Database I was requesting thus it was failing on the DB connection setup.
add a comment |
Turns out Travis CI wasn't able to access the Database I was requesting thus it was failing on the DB connection setup.
Turns out Travis CI wasn't able to access the Database I was requesting thus it was failing on the DB connection setup.
answered Nov 26 '18 at 0:33
gbamgbam
69941129
69941129
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53463969%2fmocha-chai-timeout-ensuring-promise-resolves%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Having other people read this should be a good reminded why you should have good descriptive names for tests. I can't tell what you testing here with "Function oLab.GetObjects & oLab.Deploy". Using
catch
and the second callback tothen
is probably a mistake because you will intercept the error generated by a failing test.– Mark Meyer
Nov 25 '18 at 1:48
@MarkMeyer I have logging in both catch statements and neither of them log thus I didn't think they were executing and why I left them off. I wrote a significantly more complicated test that I've stripped down to this as it was still failing the basic test in TravisCI. If I caught - and logged - the error on the inner function, why is it a bad idea to nest catch statements?
– gbam
Nov 25 '18 at 1:53
You are using both callbacks in
then
withthen(done, done)
The second call back is for errors. Unless you throw in the second call backcatch()
will never happen. It's much easier with mocha to leavedone
out of it and just return the promise.– Mark Meyer
Nov 25 '18 at 2:00
@MarkMeyer I can understand the rationale for returning the promise however when return l.getObjects() - it timesout which is why I turned to done. I know l.getObjects returns a promise as if I set l.getObjects equal to a variable and log it, it shows promise. I started with returning the promises directly then turned to done() as I couldn't get it to work.
– gbam
Nov 25 '18 at 2:11
You need to make sure you remove
done
fromit('Function oLab.GetObjects & oLab.Deploy', (done)
. That's how it knows to look for a promise.– Mark Meyer
Nov 25 '18 at 2:12