2017-08-23 4 views
0

私はXMLHttpRequestオブジェクトを作成する必要があるscalatestを使用してscala.jsテストを作成しています。私は次のエラーを受け取り、理由を理解できません。スカラーテストで "TypeError:Xは関数ではありません"

[info] scala.scalajs.js.JavaScriptException: TypeError: $g.XMLHttpRequest is not a function

私はまで失敗テストを削減しました:私は私のメインプログラムにライン val xhr = new XMLHttpRequest()を成功裏に含めましたし、それが正常に動作

package oat.browser.network 

import org.scalajs.dom.XMLHttpRequest 
import org.scalatest.FreeSpec 

class AjaxToolsSpec extends FreeSpec { 

    "AjaxTools" - { 
    "should parse a simple object" in { 
     val xhr = new XMLHttpRequest() // Failing line 
     this.succeed 
    } 
    } 
} 

これを引き起こすテスト環境については何が変ですか?

jsEnv := new org.scalajs.jsenv.jsdomnodejs.JSDOMNodeJSEnv() 

(通常npm install jsdom付き)別途jsdomをインストールする必要があります:

build.sbtは、あなたがこのSBT設定で、たとえば、DOMをサポートしていますconfigure a JavaScript environmentに必要 libraryDependencies ++= Seq(..., "org.scala-js" %%% "scalajs-dom" % "0.9.1",...)

+0

私はあなたのテスト環境がダウンしていると思われます。ほとんどのJSテスト環境にはデフォルトでDOMが含まれていません。私はそれがあなたの誤りを説明すると信じています。 libraryDependenciesエントリはScala.jsにXMLHttpRequestが存在することを期待していますが、実際にあなたが実行している環境に存在しない場合は役に立ちません。 –

答えて

1

が含まれています。

+0

うわー!どのような速い応答(26分)。ありがとう!しかし、私はまだ苦労しています。最初はjsdomnodejsはパッケージjsenvで定義されていませんでした。 sbt-scalajsのバージョンを0.6.17から0.6.19に上げました。変化なし。問題のモジュールの設定に "jsDependencies + = RuntimeDOM"を追加しました。次に、得た [エラー] /Users/bwbecker/oat/src/oat3/node_modules/jsdom/lib/api.js:10 [エラー] const {URL} = require( "whatwg-url"); [エラー]^ [エラー] [エラー] SyntaxError:予期しないトークン{ "npm install jsdom"でインストールされているjsdomライブラリにあります。 – bwbecker

+0

ご使用のNode.jsのバージョンが古すぎます。 jsdomがIIRCを動作させるには少なくともバージョン6以上が必要です。 – sjrd

+0

実行中のテストの高速最適化フェーズは、これまでよりもはるかに時間がかかります。最適化にjsdomを含めることが原因であると想定するのは合理的ですか?これを避けるためにテストを分離する方法はありますか?これらのテストを別々のモジュールに入れているように見えるかもしれませんが、それは過労かもしれません。 – bwbecker

関連する問題