6

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

nightwatch を使用した模擬 http リクエストの可能性はありますか?

4

1 に答える 1

9

Nightwatch.jsはエンド ツー エンドのテスト ツールです。要点は、実際の UI とそれらが呼び出す API がライブになる (そしてモックではない) ということです。したがって、casper.js( http://casperjs. org/ ) またはnightmare( https://github.com/segmentio/nightmare )

ただし、http 呼び出しをnightwatchモックすることは、nock私が信じていることで実行できるはずです (それを正当化する奇妙なユースケースがある場合) 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 を異なるドメイン (またはポート) に配置すると、問題が解決する場合があります

于 2017-08-03T13:49:34.577 に答える