无法在不同文件中实例化一个类的对象
Coffeescript: Unable to instantiate object of a class in different file
我无法在测试中实例化(或调用它们的方法)量角器代码中其他文件中存在的类。这是我的文件
Input.coffee
class exports.Input
@element = null
constructor: (@type, @selector, @identifier) ->
if @selector is "id"
@element = element(By.id(@identifier))
if @selector is "class"
@element = element(By.css(@identifier))
console.log @element
click: ->
@element.click()
putText: (inputText) ->
@element.sendKeys(inputText)
test.coffee
describe 'Testing protractor modules', ->
it 'Testing demo and experimentations', ->
# Initialize all the DOM elements which the suite covers
initialize = require('..''utils''initialize.coffee').Initialize("https://url.com")
inputText = require('..''utils''input.coffee').Input("text", "id", "user_email")
inputPassword = require('..''utils''input.coffee').Input("text", "id", "user_password")
console.log inputText # This is printing undefined
inputText.putText("analytics@grs.com")
inputPassword.putText("analytics123")
initialize.coffee
class exports.Initialize
constructor: (@url) ->
browser.ignoreSynchronization = true
browser.get @url
console.log "Initialize constructor" # This works
错误:Cannot read property of undefined.
这里的问题是由于所需的CoffeeScript文件没有被翻译成JavaScript。如果你在你的HTML页面中包含CoffeeScript编译器,它只会自动在开始编译<script type="text/coffeescript">
元素。
我基本上停止使用require
来包含CoffeeScript文件。
虽然有一个实用程序可以将各种CoffeeScript文件连接成一个文件,这里https://github.com/fairfieldt/coffeescript-concat(在这篇文章中引用,这就是为什么这是一个重复的问题),所以你可以很容易地将单个文件编译成JavaScript。
如果你仍然想要类似require
的东西来加载CoffeeScript文件,你需要为这样的文件做一个异步或同步的HTTP请求,获取内容,然后将其转换为JS代码。
require
做类似的事情,你需要一个回调函数稍后执行…或者太晚了,在请求完成之后,在CoffeeScript被编译之后。
您还需要使用Function
或eval
评估编译后的CoffeeScript。eval
在当前作用域中执行被调用的代码,而Function
在全局作用域中执行。
使用异步HTTP请求和eval
计算编译后的CoffeeScript的示例(首先包括CoffeeScript编译器):
(注意:这个例子并没有避免脚本缓存,这有点宽泛)
function getCoffee(filePath, callback) {
var request = new XMLHttpRequest;
request.open('get', filePath, true);
request.onreadystatechange = function() {
if (request.readyState === 4) {
if (request.status === 200) {
var compiled = CoffeeScript.compile(request.responseText);
if (typeof callback === 'function') {
callback(compiled);
}
}
else {
/* Handle request error here */
}
}
};
request.send();
}
getCoffee "script.coffee",
(compiled) ->
eval compiled;
注意:我不知道你的require
是如何工作的,因为我不知道Angular.js,所以你可以手动处理导出
- 如果使用 lodash 将属性存在于另一个对象中,则向对象添加属性
- Javascript(Angular)从一个对象数组到第二个数组查找值
- 对一个对象使用reduce可以返回一个没有't在数组中包含目标字母
- AngularJS&JSON-从Previous&下一个对象
- jQuery$.inArray()总是返回-1和一个对象数组
- javascript处理一个对象数组以获得一个新的对象数组
- javascript函数,它接受两个输入:一个对象和一个键,并返回对象中该键的相应值
- 你能用来自数组的属性名称生成一个对象吗
- 预期响应包含一个对象,但在angular js中得到一个数组错误
- Protractor:element.getText()返回一个对象,而不是String
- 如何使用jQuery添加另一个对象的高度作为边距
- 计算从一个对象到另一个对象的路径并沿其移动
- 如何将一个对象添加到每个对象数组中
- 为了避免创建全局变量,可以将所有变量分配给一个对象吗
- 将javascript对象(属性+值)合并到一个对象中
- 尝试简化检查对象键是否为true并将其推送到另一个对象
- 从 javascript 中的对象方法返回一个对象
- 响应应包含一个对象,但得到的却是GET操作的数组
- js:如何制作一个循环,将20个不同的东西添加到一个对象中
- 用javascript创建另一个对象的实例