执行 elm-test 抛出运行时异常:Cannot read 属性 'href' of undefined
Executing elm-test throws runtime exception: Cannot read property 'href' of undefined
以下测试导致运行时异常:
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
TypeError: Cannot read property 'href' of undefined
at Object.getLocation (eval at <anonymous> (my_path\AppData\Roaming\npm\node_modules\elm-test\lib\runner.js:84:37),
<anonymous>:1392 6:17)
at Function.eval (eval at <anonymous> (my_path\AppData\Roaming\npm\node_modules\elm-test\lib\runner.js:84:37),
<anonymous>:14127:43)
at A2 (eval at <anonymous> (my_path\AppData\Roaming\npm\node_modules\elm-test\lib\runner.js:84:37),
<anonymous>:92:11)
at eval (eval at <anonymous> (my_path\AppData\Roaming\npm\node_modules\elm-test\lib\runner.js:84:37),
<anonymous>:21270:31)
at eval (eval at <anonymous> (my_path\AppData\Roaming\npm\node_modules\elm-test\lib\runner.js:84:37),
<anonymous>:22757:4)
at my_path\AppData\Roaming\npm\node_modules\elm-test\lib\runner.js:84:32
at Object.evalElmCode (my_path\AppData\Roaming\npm\node_modules\elm-test\lib\runner.js:84:76)
at my_path\AppData\Roaming\npm\node_modules\elm-test\bin\elm-test:196:14
at my_path\AppData\Roaming\npm\node_modules\elm-test\node_modules\graceful-fs\graceful-fs.js:78:16
at tryToString (fs.js:456:3)
我的预感是 Navigaton.Location 是异常的原因。但是,我不知道如何解决这个问题。
源代码可以在 GitHub.
上找到
我不知道你是否在 Elm Slack 上找到了这个问题的答案,但我花了一些时间研究这个问题并找到了问题的原因。
简而言之,问题在于将您对 Navigation.program
的调用包含在使用 elm-test 获取 运行 的 Elm 文件中。在您的例子中,Navigation.program
在 Home.elm
中。将它移到另一个模块(或暂时将其注释掉),您的测试应该 运行.
更详细地说,Navigation.program
背后的本机代码获取 document.location
并将其传递到您的 init
函数中。但是,当 运行ning elm-test 时,您没有 document
对象,因为没有浏览器。 elm-test 将组成一个骨架 document
对象,但是这个对象没有 location
属性 因此抛出异常试图获取 location.href
.
elm-test 包文档('Application-specific techniques' 下的第 1 点)中对此有一些指导:
Avoid importing your Main
module. Most of your code belongs in other modules, so import those instead.
或者,document.location
has now been polyfilled 在 elm-test 版本 0.18.9 中,因此升级到该版本也可以解决此问题。
以下测试导致运行时异常:
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
TypeError: Cannot read property 'href' of undefined
at Object.getLocation (eval at <anonymous> (my_path\AppData\Roaming\npm\node_modules\elm-test\lib\runner.js:84:37),
<anonymous>:1392 6:17)
at Function.eval (eval at <anonymous> (my_path\AppData\Roaming\npm\node_modules\elm-test\lib\runner.js:84:37),
<anonymous>:14127:43)
at A2 (eval at <anonymous> (my_path\AppData\Roaming\npm\node_modules\elm-test\lib\runner.js:84:37),
<anonymous>:92:11)
at eval (eval at <anonymous> (my_path\AppData\Roaming\npm\node_modules\elm-test\lib\runner.js:84:37),
<anonymous>:21270:31)
at eval (eval at <anonymous> (my_path\AppData\Roaming\npm\node_modules\elm-test\lib\runner.js:84:37),
<anonymous>:22757:4)
at my_path\AppData\Roaming\npm\node_modules\elm-test\lib\runner.js:84:32
at Object.evalElmCode (my_path\AppData\Roaming\npm\node_modules\elm-test\lib\runner.js:84:76)
at my_path\AppData\Roaming\npm\node_modules\elm-test\bin\elm-test:196:14
at my_path\AppData\Roaming\npm\node_modules\elm-test\node_modules\graceful-fs\graceful-fs.js:78:16
at tryToString (fs.js:456:3)
我的预感是 Navigaton.Location 是异常的原因。但是,我不知道如何解决这个问题。
源代码可以在 GitHub.
上找到我不知道你是否在 Elm Slack 上找到了这个问题的答案,但我花了一些时间研究这个问题并找到了问题的原因。
简而言之,问题在于将您对 Navigation.program
的调用包含在使用 elm-test 获取 运行 的 Elm 文件中。在您的例子中,Navigation.program
在 Home.elm
中。将它移到另一个模块(或暂时将其注释掉),您的测试应该 运行.
更详细地说,Navigation.program
背后的本机代码获取 document.location
并将其传递到您的 init
函数中。但是,当 运行ning elm-test 时,您没有 document
对象,因为没有浏览器。 elm-test 将组成一个骨架 document
对象,但是这个对象没有 location
属性 因此抛出异常试图获取 location.href
.
elm-test 包文档('Application-specific techniques' 下的第 1 点)中对此有一些指导:
Avoid importing your
Main
module. Most of your code belongs in other modules, so import those instead.
或者,document.location
has now been polyfilled 在 elm-test 版本 0.18.9 中,因此升级到该版本也可以解决此问题。