Vladimir Melekh Vladimir Melekh - 3 months ago 16
TypeScript Question

How to trigger Chokidar event programmaticaly

I have a class, which is using Chokidar and now need to test it with jasmine. This is method, where chokidar comes on board:

public watch(path: string) {
var watchOptions: chokidar.WatchOptions = <chokidar.WatchOptions> {
persistent: true
};
this.watcher = chokidar.watch(path, watchOptions);
this.watcher.on("add", (fileName: string, stats: fs.Stats) => {
this.sendNotifyAction(new NotifyAction(PathEvent.Add, fileName));
}).on("change", (fileName: string, stats: fs.Stats) => {
this.sendNotifyAction(new NotifyAction(PathEvent.Change, fileName));
})
}


I want to have in my test something like:

it("Should send notification, when internal directory is added", () => {
runs(() => {
flag = false;
pathWatch.watch(dirPath);

//TRIGGER chokidar on.add event??
//spyOn(pathWatch.watcher, "on").and.callFake((params) => {
// flag = true;
//});

});
waitsFor((): boolean => {
return flag;
}, "failure", 5000);

runs(() => {
var expectedNotifyAction = new NotifyAction(PathEvent.Add, notificationInternalDirPath);
expect(subscriber.processNotifyAction).toHaveBeenCalledWith(expectedNotifyAction);
});
});


The problem is that I don't know how to emulate Chokidar events. Any help is much appreciated.

Answer

The watcher instance inherits from EventEmitter, so you can call .emit() on it (although I'm not sure how/if that would work with TypeScript):

pathWatch.watcher.emit('add', PATH, STATS);
Comments