我无法在测试中使用量角器代码中的其他文件中实例化(或调用他们的方法)类。 这是我的文件
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
错误:无法读取未定义的属性。
答案 0 :(得分:0)
这里的问题是因为所需的CoffeeScript文件没有转换为JavaScript。如果在HTML页面中包含CoffeeScript编译器,它只会在开始时自动编译<script type="text/coffeescript">
个元素。
我基本上停止使用require
来包含CoffeeScript文件。
虽然有一个实用工具可以将各种CoffeeScript文件连接成一个,但这里https://github.com/fairfieldt/coffeescript-concat(在post引用,这就是为什么这是一个重复的问题),所以你可以很容易将单个文件编译为JavaScript。
如果您仍然需要类似require
的内容来加载CoffeeScript文件,您需要为此类文件发出异步或同步HTTP请求,获取内容,然后将其转换为JS代码。
不推荐使用同步HTTP请求,因此您无法为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,因此您可以手动处理导出。