2016-10-19 4 views
0

私はインスタンス化できませんよ(またはそのメソッドを呼び出す)のテストで私の分度器コード内の他のファイルに存在するクラスを。ここ はInput.coffeeのCoffeeScript:別のファイルにクラスのオブジェクトをインスタンス化できません

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("[email protected]") 
    inputPassword.putText("analytics123") 

initialize.coffee

class exports.Initialize 
    constructor: (@url) -> 
    browser.ignoreSynchronization = true 
    browser.get @url 
    console.log "Initialize constructor" # This works 

エラー私のファイル

です:未定義のプロパティを読み取ることができません。

+0

の可能性のある重複した[コーヒースクリプトでファイルをインクルードする方法はありますか?](http://stackoverflow.com/questions/7718121/is-there-a-way-to-include-file-in-coffee-スクリプト) – Hydro

+0

@Someoneいいえ、コマンドでファイルを連結するのに意味がない分度器を使用してUIテストを行っているためです。私が間違っているなら私を訂正してください。 :) –

答えて

0

ここでの問題は、必要なCoffeeScriptファイルがJavaScriptに変換されないためです。 HTMLページにCoffeeScriptコンパイラを組み込むと、最初に<script type="text/coffeescript">要素のみが自動的にコンパイルされます。

私は基本的にCoffeeScriptのファイルを含めるようにrequireの使用を停止したいです。

単一のものに様々なCoffeeScriptのファイルを連結ユーティリティがありますが、ここではhttps://github.com/fairfieldt/coffeescript-concat(これは重複して質問ですなぜこのpostに引用され、これはある)ので、あなたは簡単にJavaScriptに1つのファイルをコンパイルすることができます。

requireに似たものをCoffeeScriptファイルをロードするには、そのようなファイルに対して非同期または同期HTTPリクエストを行う必要があります。コンテンツを取得してJSコードに変換します。

同期HTTPリクエストは廃止されました。したがって、requireと同様のことをすることはできません。コールバック関数を後で実行する必要があります...またはリクエストが完了してから遅れていました。コンパイルされた。

またFunctionまたはevalしてコンパイルのCoffeeScriptを評価する必要があります。 evalは呼び出された現在のスコープでコードを実行し、Functionはグローバルスコープで実行します。

コンパイルCoffeeScriptの(最初のCoffeeScriptコンパイラを含む)に評価するために、非同期のHTTPリクエストとevalを使用した例:

を(注:この例では、キャッシュにスクリプトを避けていない、これは少し広い)

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; 

注:私はAngular.jsを知らないので、私はどのようにあなたのrequire作品の道を知らないので、手動での輸出を処理することができます。

関連する問題