Nightwatch模拟HTTP请求

Bru*_*sma 6 mocking nightwatch.js nock

我尝试使用nock和其他libs(如sinonjs)模拟HTTP请求,但没有成功.

import nock from "nock"

const URL = "http://localhost:8080/"

const SIGN_IN_PATH = "/fake/users/sign_in.json"

export const signInRequest = (status, payload = {}) => {
  return nock(URL).get(SIGN_IN_PATH).reply(status, payload)
}
Run Code Online (Sandbox Code Playgroud)

-

import { signInRequest } from "./../../utils/fakeRequests"

const doLogin = (browser) => {
  return browser
          .url("http://localhost:8080")
          .waitForElementVisible('form', 1000)
          .setValue('input[name=email]', 'foo@foo.com')
          .setValue('input[name=password]', 'somepass')
          .click('button[type=submit]')
          .pause(500)
}

export default {
  "Do login and shows error message": (browser) => {
    signInRequest(403)

    doLogin(browser)
      .waitForElementVisible('.error', 1000)
      .end()
  }
}
Run Code Online (Sandbox Code Playgroud)

它可能用夜视仪模拟http请求?

Mar*_*rty 7

Nightwatch.js是一个端到端测试工具-关键是实际的UI以及它们调用的api将是实时的(而不是模拟的),因此,也许您正在寻找一种设计用于集成测试的框架,例如casper.jshttp:// casperjs。 org /)或nightmarehttps://github.com/segmentio/nightmare

但是我相信模拟http调用nightwatch应该是可行的nock(如果您有一些奇怪的用例可以保证这一点),请确保您在测试之前没有http调用(它们甚至可能处于before阻塞状态),例如:

module.exports = {
  'test abc' : function (browser) {
    nock('http://example.com')
      .get('/users')
      .query({name: 'martin'})
      .reply(200, {results: [{id: '123'}]});

    // do test stuff
  },
};
Run Code Online (Sandbox Code Playgroud)

您的示例可能存在的问题是,您在模拟整个用户界面- nightwatch可能以某种方式阻止了同一域的被拦截。将您的UI和API放在不同的域(或端口)上可能会解决此问题

  • 想要在不依赖后端的情况下独立运行 UI 测试是一个奇怪的用例吗?您可以为这两种情况编写测试 - 当 API 的行为符合预期时和当它们不符合预期时 - 并且不必依赖实际服务来节省运行测试的时间。 (3认同)