摩卡单元测试-每次测试后如何清除缓存的JavaScript

时间:2019-07-17 22:45:03

标签: javascript unit-testing mocha jsdom

我正在尝试使用mocha和jsdom测试javascript文件(我们称其为hello.js)。我有几个单元测试;每个测试基本上都会设置一些窗口属性,调用hello.js,并检查窗口属性值。测试似乎正在以某种方式运行。但是,在第一次测试后,mocha似乎使用了“缓存的” hello.js(记录仅在第一次测试中显示)。

有人可以告诉我如何确保每次测试都重新加载hello.js吗?

const expect = require('chai').expect;
const jsdom = require('jsdom');
const { JSDOM } = jsdom;
var dom = (new JSDOM(`<!DOCTYPE html><html><head></head><body></body></html>`));

describe('hello', ()=>{
    afterEach(()=>{
        dom = (new JSDOM(`<!DOCTYPE html><html><head></head><body></body></html>`));
        global.window = {};
        document = {};
        location = {};
    });
    it('should test A', ()=> {
        global.window = dom.window;
        global.window.document.cookie = "test=kiwi";
        document = global.window.document;
        const hello = require('../public/hello.js');
       expect(document.getElementsByTagName('IFRAME').length).to.equal(1);
    });
    it('should test B', ()=> {
        global.window = dom.window;
        global.window.document.cookie = "test=apple";
        document = global.window.document;
        const hello = require('../public/hello.js');
       expect(document.getElementsByTagName('IFRAME').length).to.equal(0);
    });
});

2 个答案:

答案 0 :(得分:0)

有一个库可以供您使用:

示例: const resetCache = require('resnap')(); // Capture "clean" cache state

参考:Resnap

答案 1 :(得分:0)

你可以使用flush-cache

npm i flush-cache --save-dev
beforeEach(function () {
  flush() 
})