add specs for crawler service
This commit is contained in:
parent
56be0e9730
commit
d9212f707b
|
@ -0,0 +1,9 @@
|
||||||
|
const EventEmitter = require('events')
|
||||||
|
|
||||||
|
class MockLogger extends EventEmitter {
|
||||||
|
log({ message, level, service }) {
|
||||||
|
this.emit('test:log', { message, level, service })
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = MockLogger
|
|
@ -0,0 +1,31 @@
|
||||||
|
const sinon = jest.requireActual('sinon')
|
||||||
|
|
||||||
|
let currentSpy = null
|
||||||
|
|
||||||
|
const mockRequest = (options) => {
|
||||||
|
try {
|
||||||
|
const spy = currentSpy || sinon.spy()
|
||||||
|
|
||||||
|
console.info(`mock request ${JSON.stringify(options)}`)
|
||||||
|
spy(options)
|
||||||
|
} catch (err) {
|
||||||
|
console.trace(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const setRequestSpy = () => {
|
||||||
|
const spy = sinon.spy()
|
||||||
|
|
||||||
|
currentSpy = spy
|
||||||
|
return spy
|
||||||
|
}
|
||||||
|
|
||||||
|
const clearRequestSpy = () => {
|
||||||
|
currentSpy = null
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
mockRequest,
|
||||||
|
setRequestSpy,
|
||||||
|
clearRequestSpy,
|
||||||
|
}
|
File diff suppressed because it is too large
Load Diff
|
@ -11,7 +11,7 @@
|
||||||
"start": "node lib/index.js",
|
"start": "node lib/index.js",
|
||||||
"start:dev": "NODE_ENV=development PORT=3000 nodemon lib/index.js",
|
"start:dev": "NODE_ENV=development PORT=3000 nodemon lib/index.js",
|
||||||
"start:dev:inspect": "NODE_ENV=development PORT=3000 nodemon --inspect lib/index.js",
|
"start:dev:inspect": "NODE_ENV=development PORT=3000 nodemon --inspect lib/index.js",
|
||||||
"test": "echo \"Error: no test specified\" && exit 1"
|
"test": "jest"
|
||||||
},
|
},
|
||||||
"keywords": [
|
"keywords": [
|
||||||
"facebook",
|
"facebook",
|
||||||
|
@ -37,6 +37,10 @@
|
||||||
"winston-daily-rotate-file": "^4.2.1"
|
"winston-daily-rotate-file": "^4.2.1"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"nodemon": "^1.19.3"
|
"chai": "^4.2.0",
|
||||||
|
"chai-sinon": "^2.8.1",
|
||||||
|
"jest": "^26.1.0",
|
||||||
|
"nodemon": "^1.19.3",
|
||||||
|
"sinon": "^9.0.2"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,74 @@
|
||||||
|
const chai = require('chai')
|
||||||
|
const sinon = require('sinon')
|
||||||
|
const { expect } = chai
|
||||||
|
const chaiSinon = require('chai-sinon')
|
||||||
|
const { mockRequest, setRequestSpy, clearRequestSpy } = require('../../mocks/request.mock')
|
||||||
|
|
||||||
|
const crawl = require('../../lib/services/crawler')
|
||||||
|
const MockLogger = require('../../mocks/logger.mock')
|
||||||
|
|
||||||
|
chai.use(chaiSinon)
|
||||||
|
jest.mock('request', () => mockRequest)
|
||||||
|
|
||||||
|
describe(crawl, () => {
|
||||||
|
let logger
|
||||||
|
let request
|
||||||
|
|
||||||
|
beforeEach(() => {
|
||||||
|
logger = new MockLogger()
|
||||||
|
clearRequestSpy()
|
||||||
|
})
|
||||||
|
|
||||||
|
it('should return promise', () => {
|
||||||
|
const promise = crawl('https://abc.xyz', { logger })
|
||||||
|
|
||||||
|
expect(promise).to.be.instanceOf(Promise)
|
||||||
|
})
|
||||||
|
|
||||||
|
it('should level log message', (callback) => {
|
||||||
|
logger.on('test:log', ({ message, level, service }) => {
|
||||||
|
expect(message).to.equal('Crawl started for url: https://abc.xyz')
|
||||||
|
expect(level).to.equal('info')
|
||||||
|
expect(service).to.equal('parser')
|
||||||
|
callback()
|
||||||
|
})
|
||||||
|
|
||||||
|
crawl('https://abc.xyz', { logger })
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
it('should call request', () => {
|
||||||
|
const spy = setRequestSpy()
|
||||||
|
|
||||||
|
crawl('https://abc.xyz', { logger })
|
||||||
|
|
||||||
|
expect(spy).to.have.been.calledOnce
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
it('should call request with URL', () => {
|
||||||
|
const spy = setRequestSpy()
|
||||||
|
|
||||||
|
crawl('https://zzz.yyy', { logger })
|
||||||
|
|
||||||
|
expect(spy.args[0][0].url).to.equal('https://zzz.yyy')
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
it('should call request with `Accept-Language` header value', () => {
|
||||||
|
const spy = setRequestSpy()
|
||||||
|
|
||||||
|
crawl('https://zzz.yyy', { logger })
|
||||||
|
|
||||||
|
expect(spy.args[0][0].headers).to.have.property('Accept-Language', 'en-US, en')
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
it('should call request with `User-Agent` header value', () => {
|
||||||
|
const spy = setRequestSpy()
|
||||||
|
|
||||||
|
crawl('https://zzz.yyy', { logger })
|
||||||
|
|
||||||
|
expect(spy.args[0][0].headers).to.have.property('User-Agent', 'request')
|
||||||
|
})
|
||||||
|
})
|
Loading…
Reference in New Issue