Losing scope of variable

92 views
Skip to first unread message

CoffeeManiac

unread,
Mar 19, 2015, 4:39:36 PM3/19/15
to nod...@googlegroups.com
I can't figure out why I lose the object instance for my variable _page once it gets inside the function for the module.exports.  It bombs out here because _page is undefined but it's fine and has an instance BEFORE this _page.open 

var phantom = require('phantom'), _ph, _page;
var should = require('chai').should();

phantom.create("--web-security=no", "--ignore-ssl-errors=yes", { port: 12345 }, function (ph) {
console.log("Phantom Bridge Initiated");
_ph = ph;

_ph.createPage(function(page) {
console.log("Page created!");
_page = page;
});

phaçntom.exit();
});


module.exports = function() {
"use strict";

this.Given(/^I visit the episodes display page$/, function (callback) {

console.log("_page: " + _page);
_page.open("/", function(status){

status.should.equal("success");
});

callback();

});


this.Then(/^I should not see any episodes listed$/, function (callback) {
//page.should.have.content("There are no episodes available");

callback.pending();
});



this.Given(/^there are some episodes to view$/, function (callback) {
// Write code here that turns the phrase above into concrete actions
callback.pending();
});

this.When(/^I go to the episodes display page$/, function (callback) {
// Write code here that turns the phrase above into concrete actions
callback.pending();
});

this.Then(/^I should see a list of episodes grouped by Topic$/, function (callback) {
// Write code here that turns the phrase above into concrete actions
callback.pending();
});


};

Zach Rollyson

unread,
Mar 19, 2015, 5:16:37 PM3/19/15
to nod...@googlegroups.com
Initial assumption would be that _page gets defined in a callback within a callback and _page.open gets called in a different callback so all that is asynchronous and there could be no guarantee that _page is defined by the time _page.open is called.

CoffeeManiac

unread,
Mar 20, 2015, 10:50:18 AM3/20/15
to nod...@googlegroups.com
Right but I do not know how to resolve this.  How can I get this to work?

CoffeeManiac

unread,
Mar 20, 2015, 10:50:23 AM3/20/15
to nod...@googlegroups.com
right so how would I solve this and share _page?


On Thursday, March 19, 2015 at 4:16:37 PM UTC-5, Zach Rollyson wrote:

zladuric

unread,
Mar 20, 2015, 10:50:24 AM3/20/15
to nod...@googlegroups.com
phantom.create() and then the createPage() are async. That means that by the time the interpreter gets to the module.exports section, your _page is stil not bound. It only fired a phantom.create, and it's still waiting for its callback and phantom.createPage callback. You could probably add a console.log('Creating exports') just above creating module.exports and I bet that one would be shown before the other two log lines.

Now, you would have to defer creating the exports, or at least put page in something like `var locals = {page: <placeholder>}`, and then calling it as locals.page.open() later. I think something like that would work.

CoffeeManiac

unread,
Mar 20, 2015, 1:38:31 PM3/20/15
to nod...@googlegroups.com
It's very very very very annoying that these posts are moderated.  What forum does that!

CoffeeManiac

unread,
Mar 20, 2015, 1:38:35 PM3/20/15
to nod...@googlegroups.com
Also wouldn't the fact that I am doing a pre-mature .exit() dispose any page that was created?  I think that would also be another issue besides just the async issue I'm assuming...


On Friday, March 20, 2015 at 9:50:24 AM UTC-5, zladuric wrote:

CoffeeManiac

unread,
Mar 20, 2015, 1:38:36 PM3/20/15
to nod...@googlegroups.com
Thanks.  So where exactly would you put var locals, in the create method or outside that?


On Friday, March 20, 2015 at 9:50:24 AM UTC-5, zladuric wrote:

Aria Stewart

unread,
Mar 20, 2015, 2:04:52 PM3/20/15
to nod...@googlegroups.com

> On Mar 20, 2015, at 11:58 AM, CoffeeManiac <dsch...@gmail.com> wrote:
>
> It's very very very very annoying that these posts are moderated. What forum does that!

Ones where people post job ads all the time, where people double-post when things are vaguely slow, and ones where people bring dead threads back from the grave about something tangentially related, when they should start a new thread instead!

Also ones where we expect a minimum standard of kindness and decency and intend to enforce that.

Sorry I've been slow approving messages -- I suspect we're on opposite ends of the world!

Aria

Zach Rollyson

unread,
Mar 20, 2015, 4:38:36 PM3/20/15
to nod...@googlegroups.com
CoffeeManiac you could either use a promises to synchronize your async issues (https://www.google.com/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=q%20promise) or you could move phantom.create down into the module and call _page.open inside the _ph.createPage callback (or some abstraction of the same).

Zlatko Đurić

unread,
Mar 20, 2015, 4:41:39 PM3/20/15
to nod...@googlegroups.com
Off-topic first:
Didn't know Aria was a moderator here (although I read a lot of your posts), and I thank you heartily for your effort. You're doing a great job.

At the OP:

In all test frameworks there's an usual way of setting up and dismantling test suites. I'm not sure what you use there, but there should be something like `before()` and `after()` for that where you'd setup the page and make it accessible in the test suites' scopes.
 


--
Job board: http://jobs.nodejs.org/
New group rules: https://gist.github.com/othiym23/9886289#file-moderation-policy-md
Old group rules: https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines
---
You received this message because you are subscribed to a topic in the Google Groups "nodejs" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/nodejs/QRX6t4c3ViY/unsubscribe.
To unsubscribe from this group and all its topics, send an email to nodejs+un...@googlegroups.com.
To post to this group, send email to nod...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/nodejs/7972C72E-4E20-4AA0-B306-7EB4BD2CA915%40dinhe.net.
For more options, visit https://groups.google.com/d/optout.



--
Zlatko

klrumpf

unread,
Mar 21, 2015, 10:35:23 AM3/21/15
to nod...@googlegroups.com
+1 for  moderation

+1 for your competent answers, Aria
Reply all
Reply to author
Forward
0 new messages