【问题标题】:expect to test url #fragment with protractor and jasmine期望用量角器和茉莉花测试 url #fragment
【发布时间】:2016-03-13 17:14:53
【问题描述】:

我正在尝试使用量角器(与 jasmine)为我的 Web 应用程序做一些功能测试,我遇到的问题之一是:

如何检查我的网址中的当前哈希 (#fragment) 是什么?

例如使用browser.get('/'),它应该导航到http://localhost:8000/#/ url ...其中#/是在未启用html5模式时由angular使用的url#fragment(哈希)。

browser.getCurrentUrl() 将返回自 http:// 以来的绝对 URL,而不仅仅是我要测试的片段。

有没有办法以正确的方式测试这个案例?

我希望做这样的事情:

browser.get('/');
expect(browser.getCurrentUrlFragment()).toBe('#/');

browser.get('/user/');
expect(browser.getCurrentUrlFragment()).toBe('#/user');

这可能吗?

谢谢。

【问题讨论】:

    标签: javascript angularjs jasmine protractor


    【解决方案1】:

    在这种情况下可以使用多个匹配器,例如toMatch(),末尾带有$

    expect(browser.getCurrentUrl()).toMatch(/#\/user$/);
    

    或者,来自jasmine-matchers 第三方的toEndWith() 匹配器:

    expect(browser.getCurrentUrl()).toEndWith("#/user");
    

    也可以使用内置的toContain(),但这不会强制将子字符串放在字符串的末尾:

    expect(browser.getCurrentUrl()).toContain("#/user");
    

    【讨论】:

      【解决方案2】:

      只需使用内置对象 - document.location.hash。它将只返回哈希,如果 url 不包含它,则返回空字符串。

      查找 Location 对象 - 它包含一些其他用于检索 url 部分的方法。

      【讨论】:

      • 不幸的是,这与 OP 的要求并不接近。这是量角器和茉莉花特有的。
      • @alecxe 是对的,当需要进行简单检查时,此方法将起作用。但是当您必须处理承诺时(如页面更改/页面加载)使用 angularjs 时无法工作......并且会使量角器/茉莉花框架的使用变得毫无意义。
      • 纯js好可爱好方便,不知道为什么框架这么流行。
      猜你喜欢
      • 1970-01-01
      • 2017-05-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-19
      • 1970-01-01
      • 2020-10-04
      相关资源
      最近更新 更多