如何调用NightmareJs中的方法评估函数?

时间:2017-01-18 18:25:08

标签: javascript node.js nightmare

我正在尝试组织我的代码以使用Page Objects Pattern,所以我基本上创建了一个模块,其中我可以封装页面交互。

我试图解决这个问题:

it('my test step', (done) => {
        nightmare
            .wait()
            .evaluate(() => {
                return {
                    myname: document.querySelector('document-myname').innerHTML};
            })
            .then(({myname}) => {
                expect(myname).toEqual(`Jorge`);
            })
            .then(done, done.fail);
    });

进入这个:

 var page = require('../util/ui/mypage');

it('my test step', (done) => {
        nightmare
            .wait()
            .evaluate(() => {
                return {
                    myname: page.getMyName()};
            })
            .then(({myname}) => {
                expect(myname).toEqual(`Jorge`);
            })
            .then(done, done.fail);
    });

mypage.js

function getMyName() {
      return myname: document.querySelector('document-myname').innerHTML;
}


module.exports = {
     getName: getName,
};

我得到的是

 - Failed: page is not defined

1 个答案:

答案 0 :(得分:0)

您应该将page变量作为评估方法回调中的第二个参数传递,如docs中所述。这是因为evaluate方法的回调具有独立的范围,因此node.js变量不能直接使用:

var page = require('../util/ui/mypage');

it('my test step', (done) => {
        nightmare
            .wait()
            .evaluate((page) => {
                return {
                    myname: page.getMyName()};
            }, page)
            .then(({myname}) => {
                expect(myname).toEqual(`Jorge`);
            })
            .then(done, done.fail);
    });