0

我正在尝试为我的 AngularJS 应用程序编写一个端到端测试,在该测试中我检查当某个参数在 URL 中时,是否会发生某些事情。但是,$routeParams是一个空对象。这个人也有同样的问题。我试图确定一些文本出现在 UI 中时?code=whatever,在 URL 中。我的应用程序有效,这条路线符合预期:

$routeProvider.when '/',
  resolve:
    redirect: ($location, $routeParams, $http, $cookieStore) ->
      console.log $routeParams
      code = $routeParams.code
      console.log 'code: ' + code
      if code
        // do something
      else
        // do something else

当我test-index.html?code=123通过 Karma 测试运行程序访问时,在浏览器控制台中我看到:

Object {}
code: undefined

我希望必须$routeParams在单元测试中进行模拟,但我认为端到端测试会像真正的应用程序一样运行。$routeParams当肯定有 URL 参数时,为什么在我的测试中完全为空?

编辑:这是我的测试:

it 'fills in the input field when code is in URL', ->
  browser().navigateTo '/base/test-index.html?code=123#/'
  element('a.some-link').click()
  expect(input('my_param.value').val()).toBe 'something that gets set when code in URL'
4

2 回答 2

1

$route,$routeParams的大部分功能$location都在“#”之后的 url 部分工作。因此,就像在您的示例“/base/test-index.html?code=123#/”中一样,angular 只在“#”之后看到“/”,没有别的,这就是你得到 empty 的原因$routeParams。此外,您不应该$routeParams在解析功能中使用,$route.current.params而是使用。

尝试改变

browser().navigateTo '/base/test-index.html?code=123#/'

browser().navigateTo '/base/test-index.html#/?code=123'

在你的redirect

console.log $route.current.params
于 2013-10-25T16:09:34.497 回答
0

$routeParams这感觉就像地狱一样,因为我正在改变实际以适应测试,因为 AngularJS 没有像它应该的那样填写。多亏了这个通用的 JavaScript 解决方案,我添加QueryString了另一个 JS 文件,并将它包含在我的应用程序 index.html 和 test-index.html 中。然后,在我的 routes.js 中,我做code = $routeParams.code || QueryString.code. 因此,如果$routeParams是空白,这似乎只发生在测试中,那么?code=blah参数值是通过良好的 JavaScriptwindow.location解析获得的。

于 2013-10-25T15:51:39.033 回答