使用Node中的Jest对客户端JavaScript进行单元测试

3hvapo4f  于 8个月前  发布在  Jest
关注(0)|答案(1)|浏览(76)

我想用Node和Jest对一个普通的旧JavaScript客户端代码库(不使用HTML-DOM或类似的东西)进行单元测试。
如果启动Node和.load foo.js,它会加载我想要测试的代码。我可以调用函数等等。
但是单元测试是很好的,所以我决定npm init一些包,并使用Jest作为单元测试框架。
如何加载文件,使foo.test.js中的测试代码可以执行与Node REPL相同的调用?
require('./foo')不工作,因为它不是一个CommonJS模块。同样的答案暗示require('fs')require('vm')和东西在我的情况下也不工作。因为它是客户端(浏览器)的代码库,我不想让它成为一个模块。它只是一个脚本。
如果我将测试代码粘贴到foo.test.js中,它就可以工作。所以,我的结论是,我必须将测试代码作为文件操作附加到被测试代码中。有更好的方法吗?

//const cu = require('./foo');

// this is the content of foo.js, pasted into the foo.test.js.
var std = {
  nothingP : function (x) { return x === undefined || x == null; }
};
// true foo.test.js content
test('std.nothingP', () => {
  expect(std.nothingP(null)).toBe(true);
  expect(std.nothingP(undefined)).toBe(true);
  expect(std.nothingP(42)).toBe(false);
  expect(std.nothingP("Hello World")).toBe(false);
  expect(std.nothingP({})).toBe(false);
  expect(std.nothingP([])).toBe(false);
});

字符串

jtw3ybtb

jtw3ybtb1#

我创建了一个Makefile,使用unix cat命令从源文件foo.js和包含测试用例foo-tests.js的文件中构造foo.test.js
现在我可以make,然后npm test

SOURCES = ../foo.js ./foo-tests.js
OUT = ./foo.test.js

$(OUT):$(SOURCES) Makefile
    truncate -s 0 $(OUT)
    cat $(SOURCES) > $(OUT)

clean: rm $(OUT)

字符串
在命令行中,你只需要记住调用make

make && npm test


瞧,测试用例知道源代码。
“裸”函数,即那些不在命名空间对象内的函数,似乎会让Jest感到困惑。但幸运的是,在我的例子中,我的源代码中的所有内容都是“命名空间”的。

相关问题