I'm using the nested Elm architecture pattern in an application. The nested 
components respond to messages coming in on a port. The messages are 
handled by the top-level component before being handed on to the nested 
components. So the outer data structure looks something like this:

type alias FromServer =
  { message_type: MessageType
  , data: Json.Decode.Value 
  }

The data field is a Json.Decode.Value because the top-level component 
doesn't know about the message types defined by the nested components; it 
does a lookup on the incoming message type and decides to which inner 
component it will forward the message. So the top level looks like this:

subscriptions : Model.Model -> Sub Message
subscriptions model =
  theIncomingPort toMessage


toMessage : FromServer -> Message
toMessage incoming =
  case Dict.get incoming.message_type componentDictionary of
    Just MyInnerComponent ->
      InnerComponentModule.toMessage incoming |> 
MyInnerComponentMessageWrapper
    Nothing ->
      ...

The inner component's toMessage function also uses the message_type field 
to choose the decoder to apply to the Json.Decode.Value in the data field.

I want to test the inner component's toMessage function. This means that I 
need to create a FromServer record with the data contained in a 
Json.Decode.Value -- ideally created from a Json string.

However, from what I can tell the only way to create this kind of raw 
Json.Decode.Value is by passing the string in through a port. This seems 
like a pretty complicated way to set up a test. Is there some other way to 
accomplish this?

-- 
You received this message because you are subscribed to the Google Groups "Elm 
Discuss" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to elm-discuss+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to