在module.exports中新增的目的是什么?
我有一个testing分为3个部分。 主页面对象页面,页面有问题的HomePage和testing本身。
我想要HomePage
来扩展Page
对象。 但是我发现的是 – 如果在页面类中我使用:
module.exports = new Page()
我得到错误ERROR: Class extends value #<Page> is not a function or null
但是,如果我使用
module.exports = Page
它完美的作品。
有人可以解释为什么这样吗? 这是因为页面对象本身只是与每个页面的父页面,例如HomePage
或LoginPage
或任何其他页面构造?
class Page { constructor() { this.title = 'My Page'; } open(path) { browser.url('/' + path); } } module.exports = Page;
==
var Page = require('../page-models/Page'); class HomePage extends Page { get username() { return browser.element('#username'); } open() { super.open(''); } } module.exports = new HomePage();
==testing本身
var HomePage = require('../page-models/home.page'); describe('Something great', function(){ it('tests this', function(){ HomePage.open(); ...
任何帮助赞赏。 ps使用nodejs,webdriverio,mocha和chai。
当你写:
var Page = require('../page-models/Page');
variablesPage
是您从“../page-models/Page”与module.exports
导出的任何module.exports
。 如果你导出一个new Page()
对象,那么你的variablesPage
将是你创build的Page
类的那个实例,而不是这个类本身。 而且你不能extend
一个实例。 另外, require()
caching结果,所以你总是得到相同的对象。
就像你使用module.exports = Page
导出类一样,任何人require
可以自由地创build他们自己的实例。
我知道你没有问,但有一点要考虑的是创build一个统一的界面与你的类。 如果您要导出Page
类并要求用户实例化或扩展该类,则应该考虑对Homepage
执行相同的操作。 也许你可能想要做一些事情:
var Homepage = require('../page-models/home.'); class MobileHomePage extends Homepage { //... }
你不能这样做,你用new HomePage()
导出一个实例。 这意味着你将需要在你的testing中创build实例,如下所示:
var HomePageClass = require('../page-models/home.page'); var Homepage = new HomePageClass()
这是更详细的,但也使您的模块更灵活。