2016-07-15 144 views
3

我尝试用nock和其他库像sinonjs模仿HTTP请求,但没有成功。守夜模拟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]', '[email protected]') 
      .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与nightwatch请求?

+0

同样的问题,任何解决方案? –

+2

不幸的是,没有。 :(。要解决这个问题,你可以启动一个模拟服务器,并在测试环境中更改url值以使用模拟服务器地址。 –

+1

也许,这可以帮助你:http://stackoverflow.com/questions/38353886/洛坦不 - 不工作与-nightwatch硒 –

回答

0

Nightwatch.js是一个端到端的测试工具 - 这样的一点是,实际的用户界面,以及他们的通话将被直播(而不是嘲笑)的API 因此,也许你正在寻找专为集成测试,如casper.js框架(http://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 
    }, 
}; 

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