我正在尝试组织我的代码以使用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
答案 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);
});