2016-06-20 5 views
1

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 

git repository

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 
    }; 
}; 
+1

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

+0

Danke halbzebra, ich habe es gerade vor ein paar Stunden ausgearbeitet. Problem war, dass sich die Syntax seit 0.17 geändert hat. – Cavet

Antwort

2

Try this:

var _user$project$Native_MyLib = function() { 
return { 
    exported: function(arg) { return "One" }, 
    exported2: F2(function(arg) { return "Two" }), 
    exported3: F3(function(arg) { return "Three" }), 
} 
}(); 

Es ist für Reibe arbeitet als Elm 0,17.

Kaufen Sie auch voll qualifizierte Import verwenden sollten:

import Natve.MyLib 

exported : String -> String 
    Native.MyLib.exported 

exported2 : String -> String -> String 
    Native.MyLib.exported2 

exported3 : String -> String -> String -> String 
    Native.MyLib.exported3 

Benutzer- und Projekt Werte sind von Ihrem/local elm-package.json:

"repository": "https://github.com/user/project.git",