Nightwatch模拟HTTP请求

时间:2016-07-15 19:44:46

标签: 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)
}

-

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()
  }
}

可能使用夜间仪表模拟http请求?

1 个答案:

答案 0 :(得分:5)

bool是一个端到端测试工具 - 所以重点是实际用户界面以及他们调用的API将是实时的(而不是模拟的) 所以,也许您正在寻找专为集成测试而设计的框架,例如Nightwatch.jshttp://casperjs.org/)或casper.jshttps://github.com/segmentio/nightmare

然而nightmarenightwatch的模拟http调用应该与nock相关(我相信)(如果你有一些奇怪的用例需要保证) 确保你在测试之前进行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
  },
};

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