Stubbing in Sinon
I am very new to unit testing. That goes to writing modular testable code as well.
I am struggling to implement a stub to mimic whats happened in page.evaluate(). The page object is injected from an outer function using the ‘puppeteer’ library.
Been reading up on sinonjs for this.. But i havent been able to wrap my head around this.
async function cinemasfromState(page, state)
const CINEMA_STATE_SELECTOR = `div.top-select div.slider span.state[data-state-selector=$[STATE]]`;
const CINEMA_SELECTOR = `div[data-state=$[STATE]] div.top-select-option a.eccheckbox`;
await page.click(CINEMA_STATE_SELECTOR.replace("$[STATE]", state));
let res = await page.evaluate(
(elementPath, state) =>
return Array.from(document.querySelectorAll(elementPath))
.map(
function(cin, index)
let result =
cinemaState: this.state,
cinemaId: cin.getAttribute("data-id"),
cinemaName: cin.getAttribute("data-name"),
cinemaURL: cin.getAttribute("data-url")
;
return result;
,
state
)
.reduce((acc, cur) => Object.assign(acc, [cur.cinemaId]: cur ), );//filter dupes
,
CINEMA_SELECTOR.replace("$[STATE]", state),
state
);
return res;
Wondering if you could help/point in the right direction. Also any comments on testability of this code is appreciated
javascript unit-testing sinon stub
add a comment |
I am very new to unit testing. That goes to writing modular testable code as well.
I am struggling to implement a stub to mimic whats happened in page.evaluate(). The page object is injected from an outer function using the ‘puppeteer’ library.
Been reading up on sinonjs for this.. But i havent been able to wrap my head around this.
async function cinemasfromState(page, state)
const CINEMA_STATE_SELECTOR = `div.top-select div.slider span.state[data-state-selector=$[STATE]]`;
const CINEMA_SELECTOR = `div[data-state=$[STATE]] div.top-select-option a.eccheckbox`;
await page.click(CINEMA_STATE_SELECTOR.replace("$[STATE]", state));
let res = await page.evaluate(
(elementPath, state) =>
return Array.from(document.querySelectorAll(elementPath))
.map(
function(cin, index)
let result =
cinemaState: this.state,
cinemaId: cin.getAttribute("data-id"),
cinemaName: cin.getAttribute("data-name"),
cinemaURL: cin.getAttribute("data-url")
;
return result;
,
state
)
.reduce((acc, cur) => Object.assign(acc, [cur.cinemaId]: cur ), );//filter dupes
,
CINEMA_SELECTOR.replace("$[STATE]", state),
state
);
return res;
Wondering if you could help/point in the right direction. Also any comments on testability of this code is appreciated
javascript unit-testing sinon stub
It will help if you provide more context. I'm guessing (because you didn't tell us) that you are using phantom.js andpage
is not just a regular function on an imported module.
– Mark Meyer
Nov 9 at 20:25
By bad. I am using puppeteer. Will edit the question
– Theepan Thevathasasn
Nov 9 at 22:39
add a comment |
I am very new to unit testing. That goes to writing modular testable code as well.
I am struggling to implement a stub to mimic whats happened in page.evaluate(). The page object is injected from an outer function using the ‘puppeteer’ library.
Been reading up on sinonjs for this.. But i havent been able to wrap my head around this.
async function cinemasfromState(page, state)
const CINEMA_STATE_SELECTOR = `div.top-select div.slider span.state[data-state-selector=$[STATE]]`;
const CINEMA_SELECTOR = `div[data-state=$[STATE]] div.top-select-option a.eccheckbox`;
await page.click(CINEMA_STATE_SELECTOR.replace("$[STATE]", state));
let res = await page.evaluate(
(elementPath, state) =>
return Array.from(document.querySelectorAll(elementPath))
.map(
function(cin, index)
let result =
cinemaState: this.state,
cinemaId: cin.getAttribute("data-id"),
cinemaName: cin.getAttribute("data-name"),
cinemaURL: cin.getAttribute("data-url")
;
return result;
,
state
)
.reduce((acc, cur) => Object.assign(acc, [cur.cinemaId]: cur ), );//filter dupes
,
CINEMA_SELECTOR.replace("$[STATE]", state),
state
);
return res;
Wondering if you could help/point in the right direction. Also any comments on testability of this code is appreciated
javascript unit-testing sinon stub
I am very new to unit testing. That goes to writing modular testable code as well.
I am struggling to implement a stub to mimic whats happened in page.evaluate(). The page object is injected from an outer function using the ‘puppeteer’ library.
Been reading up on sinonjs for this.. But i havent been able to wrap my head around this.
async function cinemasfromState(page, state)
const CINEMA_STATE_SELECTOR = `div.top-select div.slider span.state[data-state-selector=$[STATE]]`;
const CINEMA_SELECTOR = `div[data-state=$[STATE]] div.top-select-option a.eccheckbox`;
await page.click(CINEMA_STATE_SELECTOR.replace("$[STATE]", state));
let res = await page.evaluate(
(elementPath, state) =>
return Array.from(document.querySelectorAll(elementPath))
.map(
function(cin, index)
let result =
cinemaState: this.state,
cinemaId: cin.getAttribute("data-id"),
cinemaName: cin.getAttribute("data-name"),
cinemaURL: cin.getAttribute("data-url")
;
return result;
,
state
)
.reduce((acc, cur) => Object.assign(acc, [cur.cinemaId]: cur ), );//filter dupes
,
CINEMA_SELECTOR.replace("$[STATE]", state),
state
);
return res;
Wondering if you could help/point in the right direction. Also any comments on testability of this code is appreciated
javascript unit-testing sinon stub
javascript unit-testing sinon stub
edited Nov 9 at 22:41
asked Nov 9 at 19:32
Theepan Thevathasasn
5819
5819
It will help if you provide more context. I'm guessing (because you didn't tell us) that you are using phantom.js andpage
is not just a regular function on an imported module.
– Mark Meyer
Nov 9 at 20:25
By bad. I am using puppeteer. Will edit the question
– Theepan Thevathasasn
Nov 9 at 22:39
add a comment |
It will help if you provide more context. I'm guessing (because you didn't tell us) that you are using phantom.js andpage
is not just a regular function on an imported module.
– Mark Meyer
Nov 9 at 20:25
By bad. I am using puppeteer. Will edit the question
– Theepan Thevathasasn
Nov 9 at 22:39
It will help if you provide more context. I'm guessing (because you didn't tell us) that you are using phantom.js and
page
is not just a regular function on an imported module.– Mark Meyer
Nov 9 at 20:25
It will help if you provide more context. I'm guessing (because you didn't tell us) that you are using phantom.js and
page
is not just a regular function on an imported module.– Mark Meyer
Nov 9 at 20:25
By bad. I am using puppeteer. Will edit the question
– Theepan Thevathasasn
Nov 9 at 22:39
By bad. I am using puppeteer. Will edit the question
– Theepan Thevathasasn
Nov 9 at 22:39
add a comment |
active
oldest
votes
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%2f53232208%2fstubbing-in-sinon%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
active
oldest
votes
active
oldest
votes
active
oldest
votes
active
oldest
votes
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.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- 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%2f53232208%2fstubbing-in-sinon%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
It will help if you provide more context. I'm guessing (because you didn't tell us) that you are using phantom.js and
page
is not just a regular function on an imported module.– Mark Meyer
Nov 9 at 20:25
By bad. I am using puppeteer. Will edit the question
– Theepan Thevathasasn
Nov 9 at 22:39