WIP: use ts-mock-imports
This commit is contained in:
@ -1,5 +1,5 @@
|
||||
// external lib
|
||||
import Parser from "rss-parser";
|
||||
import * as parserModule from "rss-parser";
|
||||
|
||||
// tested class
|
||||
import {
|
||||
@ -10,6 +10,7 @@ import {
|
||||
// Unit test
|
||||
import * as chai from "chai";
|
||||
import * as sinon from "ts-sinon";
|
||||
import { ImportMock } from "ts-mock-imports";
|
||||
|
||||
const sinonChai = require("sinon-chai");
|
||||
|
||||
@ -18,8 +19,6 @@ chai.use(sinonChai);
|
||||
const expect = chai.expect;
|
||||
|
||||
describe("test class RSS: jsonfile", function () {
|
||||
// let myListener: Listeners | undefined = undefined;
|
||||
|
||||
const infosListener: ListenerRRSInfo = {
|
||||
name: "my-test-service",
|
||||
address: "fake.rss.service",
|
||||
@ -77,28 +76,28 @@ describe("test class RSS: jsonfile", function () {
|
||||
/**
|
||||
* The function create my Stubs for my Listener and my Parser
|
||||
*/
|
||||
function fun_initStub(
|
||||
myListener: Listeners
|
||||
): sinon.StubbedInstance<Listeners> {
|
||||
stubListener = sinon.stubObject<Listeners>(myListener, ["setParser"]);
|
||||
stubListener.setParser.callsFake(() => {
|
||||
if (stubListener.parser !== undefined) {
|
||||
stubParser = sinon.stubObject<Parser>(stubListener.parser, [
|
||||
"parseURL",
|
||||
]);
|
||||
stubParser.parseURL
|
||||
.withArgs(infosListener.address)
|
||||
.resolves(mockedRSSOutput);
|
||||
stubParser.parseURL
|
||||
.withArgs("bad.rss.service")
|
||||
.rejects(new Error("connect ECONNREFUSED 127.0.0.1:80"));
|
||||
}
|
||||
stubListener.parser = stubParser;
|
||||
});
|
||||
stubListener.setParser();
|
||||
// stubListener.fetchRSS.returns(stubParser.parseURL(stubListener.address));
|
||||
return stubListener;
|
||||
}
|
||||
// function fun_initStub(
|
||||
// myListener: Listeners
|
||||
// ): sinon.StubbedInstance<Listeners> {
|
||||
// stubListener = sinon.stubObject<Listeners>(myListener, ["setParser"]);
|
||||
// stubListener.setParser.callsFake(() => {
|
||||
// if (stubListener.parser !== undefined) {
|
||||
// stubParser = sinon.stubObject<Parser>(stubListener.parser, [
|
||||
// "parseURL",
|
||||
// ]);
|
||||
// stubParser.parseURL
|
||||
// .withArgs(infosListener.address)
|
||||
// .resolves(mockedRSSOutput);
|
||||
// stubParser.parseURL
|
||||
// .withArgs("bad.rss.service")
|
||||
// .rejects(new Error("connect ECONNREFUSED 127.0.0.1:80"));
|
||||
// }
|
||||
// stubListener.parser = stubParser;
|
||||
// });
|
||||
// stubListener.setParser();
|
||||
// // stubListener.fetchRSS.returns(stubParser.parseURL(stubListener.address));
|
||||
// return stubListener;
|
||||
// }
|
||||
|
||||
// afterEach(function () {
|
||||
// // restore stubs
|
||||
@ -225,142 +224,138 @@ describe("test class RSS: jsonfile", function () {
|
||||
});
|
||||
|
||||
describe("fetch some data", function () {
|
||||
it("fetch without issues", function () {
|
||||
let myListener = new Listeners(infosListener);
|
||||
fun_initStub();
|
||||
it.only("fetch without issues", function () {
|
||||
const mockManager = ImportMock.mockClass<
|
||||
parserModule.default,
|
||||
typeof parserModule
|
||||
>(parserModule.default);
|
||||
mockManager.mock("parseURL").resolves(mockedRSSOutput);
|
||||
const myListener = new Listeners(infosListener);
|
||||
|
||||
expect(myListener).to.not.be.undefined;
|
||||
if (myListener !== undefined) {
|
||||
// fetch
|
||||
let res = stubListener.fetchRSS();
|
||||
|
||||
//assertion
|
||||
// calls
|
||||
expect(stubParser.parseURL).to.have.been.calledOnce;
|
||||
expect(stubParser.parseURL).to.have.been.calledWith(
|
||||
infosListener.address
|
||||
);
|
||||
|
||||
res
|
||||
.then((obj: any) => {
|
||||
expect(obj).to.be.eql(mockedRSSOutput);
|
||||
})
|
||||
.catch((err) => {
|
||||
expect(err).to.be.undefined;
|
||||
});
|
||||
} else throw new Error("Error into the before instruction");
|
||||
});
|
||||
|
||||
it("fetch with bad address", function () {
|
||||
let myListener = new Listeners({
|
||||
name: "my-test-service",
|
||||
address: "bad.rss.service",
|
||||
customfields: {
|
||||
description: ["media:group", "media:description"],
|
||||
icon: ["media:group", "media:thumbnail"],
|
||||
},
|
||||
});
|
||||
let stubListener = fun_initStub(myListener);
|
||||
// fetch
|
||||
let res = stubListener.fetchRSS();
|
||||
let res = myListener.fetchRSS();
|
||||
|
||||
//assertion
|
||||
// calls
|
||||
expect(stubParser.parseURL).to.have.been.calledOnce;
|
||||
expect(stubParser.parseURL).to.have.been.calledWith("bad.rss.service");
|
||||
// Promise
|
||||
res
|
||||
return res
|
||||
.then((obj: any) => {
|
||||
expect(obj).to.be.undefined;
|
||||
expect(obj).to.be.eql(mockedRSSOutput);
|
||||
})
|
||||
.catch((err) => {
|
||||
expect(err).to.be.eql(new Error("connect ECONNREFUSED 127.0.0.1:80"));
|
||||
expect(err).to.be.undefined;
|
||||
});
|
||||
});
|
||||
|
||||
// it("fetch with bad address", function () {
|
||||
// let myListener = new Listeners({
|
||||
// name: "my-test-service",
|
||||
// address: "bad.rss.service",
|
||||
// customfields: {
|
||||
// description: ["media:group", "media:description"],
|
||||
// icon: ["media:group", "media:thumbnail"],
|
||||
// },
|
||||
// });
|
||||
// let stubListener = fun_initStub(myListener);
|
||||
// // fetch
|
||||
// let res = stubListener.fetchRSS();
|
||||
|
||||
// //assertion
|
||||
// // calls
|
||||
// expect(stubParser.parseURL).to.have.been.calledOnce;
|
||||
// expect(stubParser.parseURL).to.have.been.calledWith("bad.rss.service");
|
||||
// // Promise
|
||||
// res
|
||||
// .then((obj: any) => {
|
||||
// expect(obj).to.be.undefined;
|
||||
// })
|
||||
// .catch((err) => {
|
||||
// expect(err).to.be.eql(new Error("connect ECONNREFUSED 127.0.0.1:80"));
|
||||
// });
|
||||
// });
|
||||
});
|
||||
|
||||
describe.skip("start", function () {
|
||||
it("Let's start the timer", async function () {
|
||||
let clock: sinon.default.SinonFakeTimers = sinon.default.useFakeTimers();
|
||||
// describe.skip("start", function () {
|
||||
// it("Let's start the timer", async function () {
|
||||
// let clock: sinon.default.SinonFakeTimers = sinon.default.useFakeTimers();
|
||||
|
||||
// classic build
|
||||
let myListener = new Listeners({
|
||||
name: "my-test-service",
|
||||
address: "fake.rss.service",
|
||||
timeloop: 60,
|
||||
customfields: {
|
||||
description: ["media:group", "media:description"],
|
||||
icon: ["media:group", "media:thumbnail"],
|
||||
},
|
||||
});
|
||||
let stubListener = fun_initStub(myListener);
|
||||
stubListener.fetchRSS.reset();
|
||||
stubListener.fetchRSS.resolves(mockedRSSOutput);
|
||||
// // classic build
|
||||
// let myListener = new Listeners({
|
||||
// name: "my-test-service",
|
||||
// address: "fake.rss.service",
|
||||
// timeloop: 60,
|
||||
// customfields: {
|
||||
// description: ["media:group", "media:description"],
|
||||
// icon: ["media:group", "media:thumbnail"],
|
||||
// },
|
||||
// });
|
||||
// let stubListener = fun_initStub(myListener);
|
||||
// stubListener.fetchRSS.reset();
|
||||
// stubListener.fetchRSS.resolves(mockedRSSOutput);
|
||||
|
||||
//spy
|
||||
let fun_spy: sinon.default.SinonSpy = sinon.default.spy((obj, err) => {
|
||||
expect(obj).to.be.eql(mockedRSSOutput);
|
||||
expect(err).to.be.eql(undefined);
|
||||
});
|
||||
// //spy
|
||||
// let fun_spy: sinon.default.SinonSpy = sinon.default.spy((obj, err) => {
|
||||
// expect(obj).to.be.eql(mockedRSSOutput);
|
||||
// expect(err).to.be.eql(undefined);
|
||||
// });
|
||||
|
||||
// start timer
|
||||
stubListener.on("update", (obj) => fun_spy(obj));
|
||||
// stubListener.start(fun_spy);
|
||||
// // start timer
|
||||
// stubListener.on("update", (obj) => fun_spy(obj));
|
||||
// // stubListener.start(fun_spy);
|
||||
|
||||
// wait and assertion
|
||||
// After 1ms
|
||||
await clock.tickAsync(1);
|
||||
expect(stubListener.fetchRSS).to.have.been.calledOnce;
|
||||
expect(fun_spy).to.have.been.calledOnce;
|
||||
// // wait and assertion
|
||||
// // After 1ms
|
||||
// await clock.tickAsync(1);
|
||||
// expect(stubListener.fetchRSS).to.have.been.calledOnce;
|
||||
// expect(fun_spy).to.have.been.calledOnce;
|
||||
|
||||
// After 60s
|
||||
await clock.tickAsync(59999);
|
||||
expect(stubListener.fetchRSS).to.have.been.calledTwice;
|
||||
expect(fun_spy).to.have.been.calledTwice;
|
||||
// // After 60s
|
||||
// await clock.tickAsync(59999);
|
||||
// expect(stubListener.fetchRSS).to.have.been.calledTwice;
|
||||
// expect(fun_spy).to.have.been.calledTwice;
|
||||
|
||||
stubListener.stop();
|
||||
});
|
||||
// stubListener.stop();
|
||||
// });
|
||||
|
||||
it("Let's start the timer (with a bad address)", async function () {
|
||||
let clock: sinon.default.SinonFakeTimers = sinon.default.useFakeTimers();
|
||||
// it("Let's start the timer (with a bad address)", async function () {
|
||||
// let clock: sinon.default.SinonFakeTimers = sinon.default.useFakeTimers();
|
||||
|
||||
// classic build
|
||||
let myListener = new Listeners({
|
||||
name: "my-test-service",
|
||||
address: "fake.rss.service",
|
||||
timeloop: 60,
|
||||
customfields: {
|
||||
description: ["media:group", "media:description"],
|
||||
icon: ["media:group", "media:thumbnail"],
|
||||
},
|
||||
});
|
||||
let stubListener = fun_initStub(myListener);
|
||||
stubListener.fetchRSS.reset();
|
||||
stubListener.fetchRSS.rejects(
|
||||
new Error("connect ECONNREFUSED 127.0.0.1:80")
|
||||
);
|
||||
// // classic build
|
||||
// let myListener = new Listeners({
|
||||
// name: "my-test-service",
|
||||
// address: "fake.rss.service",
|
||||
// timeloop: 60,
|
||||
// customfields: {
|
||||
// description: ["media:group", "media:description"],
|
||||
// icon: ["media:group", "media:thumbnail"],
|
||||
// },
|
||||
// });
|
||||
// let stubListener = fun_initStub(myListener);
|
||||
// stubListener.fetchRSS.reset();
|
||||
// stubListener.fetchRSS.rejects(
|
||||
// new Error("connect ECONNREFUSED 127.0.0.1:80")
|
||||
// );
|
||||
|
||||
//spy
|
||||
let fun_spy: sinon.default.SinonSpy = sinon.default.spy((obj, err) => {
|
||||
expect(obj).to.be.eql(undefined);
|
||||
expect(err).to.not.be.eql(undefined);
|
||||
});
|
||||
// //spy
|
||||
// let fun_spy: sinon.default.SinonSpy = sinon.default.spy((obj, err) => {
|
||||
// expect(obj).to.be.eql(undefined);
|
||||
// expect(err).to.not.be.eql(undefined);
|
||||
// });
|
||||
|
||||
// start timer
|
||||
// stubListener.start(fun_spy);
|
||||
// // start timer
|
||||
// // stubListener.start(fun_spy);
|
||||
|
||||
// wait and assertion
|
||||
// After 1ms
|
||||
await clock.tickAsync(1);
|
||||
expect(stubListener.fetchRSS).to.have.been.calledOnce;
|
||||
expect(fun_spy).to.have.been.calledOnce;
|
||||
// // wait and assertion
|
||||
// // After 1ms
|
||||
// await clock.tickAsync(1);
|
||||
// expect(stubListener.fetchRSS).to.have.been.calledOnce;
|
||||
// expect(fun_spy).to.have.been.calledOnce;
|
||||
|
||||
// After 60s
|
||||
await clock.tickAsync(59999);
|
||||
expect(stubListener.fetchRSS).to.have.been.calledTwice;
|
||||
expect(fun_spy).to.have.been.calledTwice;
|
||||
// // After 60s
|
||||
// await clock.tickAsync(59999);
|
||||
// expect(stubListener.fetchRSS).to.have.been.calledTwice;
|
||||
// expect(fun_spy).to.have.been.calledTwice;
|
||||
|
||||
stubListener.stop();
|
||||
});
|
||||
});
|
||||
// stubListener.stop();
|
||||
// });
|
||||
// });
|
||||
});
|
||||
|
Reference in New Issue
Block a user