尝试访问嵌套函数,"undefined is not a function"
Trying to access nested function, "undefined is not a function"
我正在使用 JavaScript(量角器)进行一些端到端测试。我有一个包含以下内容的 PageObjects 文件:
var SomeClass = function() {
this.get = function() {
browser.get('http://blah');
};
this.person = function() {
var firstNameInput = element(by.id('firstName'));
var lastNameInput = element(by.id('lastName'));
this.setTitle = function(title) {
element(by.xpath('//select[@id="title"]/option[text()="' + title +'"]')).click();
};
this.setFirstName = function(firstName) {
firstNameInput.sendKeys(firstName);
};
this.setLastName = function(lastName) {
lastNameInput.sendKeys(lastName);
};
};
};
module.exports = new SomeClass();
在我的规范中,我试图像这样访问嵌套函数:
describe('some test', function() {
var someClass = require('./some_class.po.js');
var data = require('./some_class.data.json');
it('do stuff', function() {
someClass.get();
someClass.person.setTitle(data.title);
someClass.person.setFirstName(data.firstName);
someClass.person.setLastName(data.lastName);
});
});
当我尝试 运行 这个测试时,更高级别 someClass.get()
工作正常,但是当它尝试执行 someClass.person.setTitle(data.title)
时,我收到一条 Failed: undefined is not a function
消息.
知道我做错了什么吗?我只使用 setter,没有 getter。不要认为我需要 return 任何东西。
您需要对代码进行一些更改才能访问 person()
的 inner
函数。在 person()
末尾添加 return this
,以便可以从 person()
.
外部访问 person()
的内部属性和方法
查看下面代码中突出显示的更改。
var SomeClass = function() {
this.get = function() {
browser.get('http://blah');
};
this.person = function() {
var firstNameInput = element(by.id('firstName'));
var lastNameInput = element(by.id('lastName'));
this.setTitle = function(title) {
element(by.xpath('//select[@id="title"]/option[text()="' + title + '"]')).click();
};
this.setFirstName = function(firstName) {
firstNameInput.sendKeys(firstName);
};
this.setLastName = function(lastName) {
lastNameInput.sendKeys(lastName);
};
return this;
// ^^^^^^^^^
};
};
module.exports = new SomeClass();
然后,您可以访问setTitle
如下。
someClass.person().setTitle(data.title)
// ^^
演示
var SomeClass = function() {
this.person = function() {
this.setTitle = function(title) {
document.write(title);
};
return this;
// ^^^^^^^^^
};
};
var myObj = new SomeClass();
myObj.person().setTitle('Hello World!');
我正在使用 JavaScript(量角器)进行一些端到端测试。我有一个包含以下内容的 PageObjects 文件:
var SomeClass = function() {
this.get = function() {
browser.get('http://blah');
};
this.person = function() {
var firstNameInput = element(by.id('firstName'));
var lastNameInput = element(by.id('lastName'));
this.setTitle = function(title) {
element(by.xpath('//select[@id="title"]/option[text()="' + title +'"]')).click();
};
this.setFirstName = function(firstName) {
firstNameInput.sendKeys(firstName);
};
this.setLastName = function(lastName) {
lastNameInput.sendKeys(lastName);
};
};
};
module.exports = new SomeClass();
在我的规范中,我试图像这样访问嵌套函数:
describe('some test', function() {
var someClass = require('./some_class.po.js');
var data = require('./some_class.data.json');
it('do stuff', function() {
someClass.get();
someClass.person.setTitle(data.title);
someClass.person.setFirstName(data.firstName);
someClass.person.setLastName(data.lastName);
});
});
当我尝试 运行 这个测试时,更高级别 someClass.get()
工作正常,但是当它尝试执行 someClass.person.setTitle(data.title)
时,我收到一条 Failed: undefined is not a function
消息.
知道我做错了什么吗?我只使用 setter,没有 getter。不要认为我需要 return 任何东西。
您需要对代码进行一些更改才能访问 person()
的 inner
函数。在 person()
末尾添加 return this
,以便可以从 person()
.
person()
的内部属性和方法
查看下面代码中突出显示的更改。
var SomeClass = function() {
this.get = function() {
browser.get('http://blah');
};
this.person = function() {
var firstNameInput = element(by.id('firstName'));
var lastNameInput = element(by.id('lastName'));
this.setTitle = function(title) {
element(by.xpath('//select[@id="title"]/option[text()="' + title + '"]')).click();
};
this.setFirstName = function(firstName) {
firstNameInput.sendKeys(firstName);
};
this.setLastName = function(lastName) {
lastNameInput.sendKeys(lastName);
};
return this;
// ^^^^^^^^^
};
};
module.exports = new SomeClass();
然后,您可以访问setTitle
如下。
someClass.person().setTitle(data.title)
// ^^
演示
var SomeClass = function() {
this.person = function() {
this.setTitle = function(title) {
document.write(title);
};
return this;
// ^^^^^^^^^
};
};
var myObj = new SomeClass();
myObj.person().setTitle('Hello World!');