执行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中,升级到该版本也可以解决此问题