[英]Coffeescript: Unable to instantiate object of a class in different file
在測試中,我無法實例化(我的量角器)代碼中其他文件中存在的類(或調用它們的方法)。 這是我的檔案
輸入咖啡
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)
測試咖啡
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
錯誤:無法讀取未定義的屬性。
這里的問題是由於所需的CoffeeScript文件未轉換為JavaScript。 如果您在HTML頁面中包含CoffeeScript編譯器,則它只會在開始時自動編譯<script type="text/coffeescript">
元素。
我基本上會停止使用require
來包含CoffeeScript文件。
雖然有這么串接各種CoffeeScript的文件合並成一個單一的一個,這里一個實用https://github.com/fairfieldt/coffeescript-concat (引自這個崗位 ,這就是為什么這是一個重復的問題),所以你可以很容易地編譯單個文件轉換為JavaScript。
如果你仍然想類似的東西給require
加載你需要為這樣的文件同步或異步HTTP請求的CoffeeScript文件,獲取內容,然后transpile它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,因此您可以手動處理導出。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.