使用 Protractor 进行 Mocking 和 Stubbing

Protractor 是一个用于自动化浏览器端到端测试的 Node.js 工具。它是 Angular 团队开发的,但也可以用于测试非 Angular 应用程序。在测试过程中,我们有时需要模拟一些数据或者对某些函数进行打桩(Stubbing)。本文将介绍如何使用 Protractor 进行 Mocking 和 Stubbing。

什么是 Mocking 和 Stubbing

Mocking 和 Stubbing 是测试中常用的两种技术。Mocking 意味着我们创建了一个虚拟对象来代替真实的对象,并定义了这个虚拟对象的行为。Stubbing 意味着我们修改了真实对象的行为,使其返回我们期望的值或执行我们期望的操作。

在 Protractor 中使用 Mocking

在 Protractor 中使用 Mocking 的方法是通过注入 $httpBackend 服务来模拟 HTTP 请求。$httpBackend 是 AngularJS 内置的一个服务,可以用于模拟 HTTP 请求和响应。下面是一个示例代码:

----------------- ---- ------------ ---------- -
  --- -------------

  --------------------- -
    -----------------
    ------------ - -------------------------------------
  ---

  -------------------- -
    ----------------------------------------------
    ------------------------------------------
  ---

  ---------- ---- - --- --------- ---------- -
    ------------------------------------------- -- ----- ------ -- - ----- ------ ----
    --------------------------------------
    -----------------------------------------------------
  ---

  ---------- ---- - ---- --------- ---------- -
    -------------------------------------------- - --- -- ----- ------ ---
    ---------------------------------------------------
    -------------------------------------
    -----------------------------------------------------
  ---
---

在上面的示例代码中,我们注入了 $httpBackend 服务,并使用它来模拟 GET 和 POST 请求。在 beforeEach 函数中,我们打开了测试应用程序的首页,并从浏览器的注射器(injector)中获取了 $httpBackend 服务。在 afterEach 函数中,我们使用 $httpBackend 的 verifyNoOutstandingExpectation 和 verifyNoOutstandingRequest 方法来验证是否有未满足的请求或期望。

在 Protractor 中使用 Stubbing

在 Protractor 中使用 Stubbing 的方法是通过修改浏览器的 JavaScript 上下文(context)来打桩。Protractor 提供了 browser.executeScript 方法来执行 JavaScript 代码。下面是一个示例代码:

------------------ ---- ------------ ---------- -
  ---------- ---- - ---------- ---------- -
    -----------------
    -------------------------------- -
      ------------- - ---------- -
        ------ ------ -------
      -
    ---
    --- ------ - --------------------------------------
    -------------------------- --------
  ---
---

在上面的示例代码中,我们使用 browser.executeScript 方法来修改浏览器的 JavaScript context,并定义了一个名为 myFunc 的函数,使其返回 'hello world'。然后,在测试代码中,我们获取页面上带有 my-func 类名的元素的文本,并验证其内容是否为 'hello world'。

总结

Mocking 和 Stubbing 是测试中常用的两种技术。在 Protractor 中,我们可以使用 $httpBackend 服务进行 Mocking,使用 browser.executeScript 方法进行 Stubbing。它们可以帮助我们更好地控制测试条件,提高测试覆盖率和可靠性。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/30258