gpt4 book ai didi

javascript - 如何从 Node 中的 Twitter Streaming API 请求返回模拟数据

转载 作者:太空宇宙 更新时间:2023-11-03 22:27:15 24 4
gpt4 key购买 nike

我有一个连接到 Twitter REST 和流 API 的 Node 应用程序。为了测试向 REST API 发出请求的代码,我可以使用 Nock 拦截 HTTP 请求并返回模拟数据,如下所示:

var nock = require('nock')

var mockData = [...]

nock('https://api.twitter.com/1.1')
.get('/search/tweets.json')
.reply(200, mockData)

我的应用程序还连接到流 API 端点 statuses/filter并对通过流 API 接收的推文进行一些分析。 In Nock's README它指出您可以将一个函数传递给返回流的 .query() ,但是我无法让它工作。

如何使用 Nock(或其他库,如果需要)将模拟数据从请求返回到此端点?理想情况下,我希望能够在需要时将推文发送到测试中的流,例如:

it('should correctly process tweets coming in on the streaming API', () => {
var mockTweet = {...}

sendMockTweetToStream(mockTweet)

...verify that the mock tweet was received and processed

})

最佳答案

我在测试中找到了一种方法来做到这一点,而无需模拟流 API。

我正在使用NPM Twitter package像这样访问 Twitter 流 API:

var client = new Twitter({
consumer_key: twitterConsumerKey,
consumer_secret: twitterConsumerSecret,
access_token_key: twitterAccessTokenKey,
access_token_secret: twitterAccessTokenSecret
})

stream = client.stream('statuses/filter', {track: 'something'})

stream.on('data', event => {
// Do some processing of incoming tweets here
})

我没有模拟流 API,而是使用自己的流并重新连线来模拟 client 对象,并设置一个函数以允许我随时向其发送模拟推文。

const rewire = require('rewire')
const stream = rewire('stream')
const moduleToTest = require('somemodule')

const mockStream = new stream.Readable()
mockStream._read = () => {}
mockStream.destroy = () => {}

// Send a Tweet event to the mock stream
function writeTweetToStream (text) {
mockStream.emit('data', {text: text})
}

describe('Module that uses the Twitter Streaming API', () => {
beforeAll(() => {
// client.stream should return our mock stream
moduleToTest.__set__('client', {stream: () => { return mockStream }})
})

it('should process incoming tweets', () => {
writeTweetToStream('This is a tweet #somehashtag')

// Assert that the tweet was received and processed
})
})

关于javascript - 如何从 Node 中的 Twitter Streaming API 请求返回模拟数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44172982/

24 4 0