执行elm测试会引发运行时异常:无法读取属性';href';未定义的

执行elm测试会引发运行时异常:无法读取属性';href';未定义的,elm,elm-test,Elm,Elm Test,以下测试导致运行时异常: test "search yields profile" <| \_ -> let -- Setup location = Navigation.Location "" "" "" "" "" "" "" "" "" "" "" ( model, _ ) = Home.init location -- Test ( ne

以下测试导致运行时异常:

test "search yields profile" <|
\_ ->
    let
        -- Setup
        location =
            Navigation.Location "" "" "" "" "" "" "" "" "" "" ""

        ( model, _ ) =
            Home.init location

        -- Test
        ( newState, _ ) =
            model |> Home.update (Search "Scott")

        -- Verify
        ( onlyOne, isContentProvider1 ) =
            ( (newState.contentProviders |> List.length) == 1
            , newState.contentProviders |> List.member contentProvider1
            )
    in
        Expect.equal (onlyOne && isContentProvider1) True
测试“搜索生成配置文件”
允许
--设置
位置=
导航。位置“”
(型号)=
Home.init位置
--试验
(新闻状态)=
model |>Home.update(搜索“Scott”)
--核实
(仅限一人,isContentProvider1)=
((newState.contentProviders |>List.length)==1
,newState.contentProviders |>List.member contentProvider1
)
在里面
Expect.equal(仅限一个和一个内容提供程序1)True
TypeError:无法读取未定义的属性'href'

在Object.getLocation(eval at.

我不知道您是否在Elm Slack上找到了这个问题的答案,但我花了一些时间研究这个问题并找到了问题的原因

简言之,问题在于将对
Navigation.program
的调用包含在使用Elm测试运行的Elm文件中。在您的情况下,
Navigation.program
位于
Home.Elm
中。将其移动到其他模块(或临时注释掉),测试应该运行

更详细地说,本机代码将获取
document.location
,并将其传递到
init
函数中。但是,当运行elm测试时,您没有
document
对象,因为没有浏览器。elm测试将构成一个骨架
document
对象,但此对象没有
位置location.href
时引发异常

软件包文档中对此有一些指导(在“应用程序特定技术”下的第1点):

避免导入您的
Main
模块。您的大部分代码属于其他模块,因此请导入这些模块


或者,在elm测试版本0.18.9中,升级到该版本也可以解决此问题