Wie organisieren wir unser Testverzeichnis bei der Entwicklung einiger Bibliotheken, die nativen JS-Code verwenden?Testen von Ullib mit lokalem Native-Verzeichnis
Ich habe versucht, dies aus zu arbeiten, aber ich bin hier blockiert, mit diesem Fehler zur Laufzeit, wenn Test/test.sh ausgeführt wird:
Elm.Native.Mylib = {};
^
TypeError: Cannot read property 'Native' of undefined
Meine Verzeichnisse auf diese Weise strukturiert sind:
Mylib:
- src :
- Mylib.elm
- Native :
- MyLib.js
- tests :
- Test.elm
- Test.sh
- elm-package.json
die Tests/Ulme-package.json enthält:
{
"version": "1.0.0",
"summary": "helpful summary of your project, less than 80 characters",
"repository": "https://github.com/user/project.git",
"license": "BSD3",
"source-directories": [
"."
,"../src"
],
"exposed-modules": [],
"native-modules": true,
"dependencies": {
"elm-community/elm-test": "1.1.0 <= v < 2.0.0",
"elm-lang/core": "4.0.1 <= v < 5.0.0"
},
"elm-version": "0.17.0 <= v < 0.18.0"
}
die Tests/Test.elm ist:
module Main exposing (..)
import Basics exposing (..)
import ElmTest exposing (..)
import Mylib exposing (..)
tests : Test
tests =
suite "elm-Mylib Library Tests"
[ ]
main =
runSuite tests
Die Tests/test.sh ist
#!/bin/sh
elm-package install -y
elm-make --yes --output test.js Test.elm
node test.js
Die src/Mylib.elm ist
module Mylib exposing (..)
import Native.Mylib exposing (..)
import Task exposing (Task)
import Time exposing (Time)
print : a -> Task x()
print value =
Native.Mylib.log (toString value)
getCurrentTime : Task x Time
getCurrentTime =
Native.Mylib.getCurrentTime
Die src/Native/Mylib.js ist
Elm.Native.Mylib = {};
Elm.Native.Mylib.make = function(localRuntime) {
localRuntime.Native = localRuntime.Native || {};
localRuntime.Native.Mylib = localRuntime.Native.Mylib || {};
if (localRuntime.Native.Mylib.values)
{
return localRuntime.Native.Mylib.values;
}
var Task = Elm.Native.Task.make(localRuntime);
var Utils = Elm.Native.Utils.make(localRuntime);
function log(string)
{
return Task.asyncFunction(function(callback) {
console.log(string);
return callback(Task.succeed(Utils.Tuple0));
});
}
var getCurrentTime = Task.asyncFunction(function(callback) {
return callback(Task.succeed(Date.now()));
});
return localRuntime.Native.Mylib.values = {
log: log,
getCurrentTime: getCurrentTime
};
};
Es sieht aus wie Sie etwas veraltet Tutorial verfolgt haben. Der Compiler von '0.17.0' unterstützt diese Art nativer Module nicht. Hier ist ein Beispiel mit nativem Code für die aktuelle Version des Compilers [elm-custom-task-example] (https://github.com/tgecho/elm-custom-task-example). Vielleicht möchten Sie auch die vorhandenen Pakete überprüfen mit nativem Code, da es keine Dokumentation zu diesem Thema gibt. – halfzebra
Danke halbzebra, ich habe es gerade vor ein paar Stunden ausgearbeitet. Problem war, dass sich die Syntax seit 0.17 geändert hat. – Cavet