使用本地Native目录测试elm lib

时间:2016-06-20 09:47:37

标签: elm

在开发使用Native js代码的库时,我们如何组织我们的测试目录?

我试图解决这个问题,但我在这里被阻止了,运行test / test.sh时运行时出现此错误:

Elm.Native.Mylib = {};
   ^

TypeError: Cannot read property 'Native' of undefined

git repository

我的目录是这样构建的:

Mylib:
   - src :
      - Mylib.elm
      - Native :
         - MyLib.js

   - tests :
      - Test.elm
      - Test.sh
      - elm-package.json

tests / elm-package.json 包含:

{
    "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"
}
tests / Test.elm 是:

module Main exposing (..)

import Basics exposing (..)
import ElmTest exposing (..)
import Mylib exposing (..)

tests : Test
tests =
    suite "elm-Mylib Library Tests"
  [ ]

main =
    runSuite tests

tests / test.sh

#!/bin/sh

elm-package install -y

elm-make --yes --output test.js Test.elm
node test.js

src / Mylib.elm

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

src / Native / Mylib.js

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 个答案:

答案 0 :(得分:2)

试试这个:

Word16

它比榆木0.17 更重要。

购买你还应该使用完全合格的导入:

Operand

用户和项目值来自您/本地var _user$project$Native_MyLib = function() { return { exported: function(arg) { return "One" }, exported2: F2(function(arg) { return "Two" }), exported3: F3(function(arg) { return "Three" }), } }();

import Natve.MyLib

exported : String -> String
    Native.MyLib.exported

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

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