我有一个JavaScript函数,其中包含“ document.write”,如下所示:
function sampleFunction(){
document.write('hello world');
}
为此,在Jasmine中编写了一个单元测试用例,如下所示:
describe("testing function", function() {
it("should give output", function() {
expect(sampleFunction()).toBe('hello world');
expect(sampleFunction()).toContain('hello');
});
});
但是当我们使用Karma运行它时,它会打开一个网页,只需在上面打印“ hello world”,测试用例就会失败。
能否请您提出为此功能编写单元测试用例的正确方法?
非常感谢!
答案 0 :(得分:2)
单元测试通常最适合用于测试小的,可消化的,纯功能的代码段。在诸如计数器之类的内部状态的事物上使用单元测试要困难得多,计数器会在每次调用某事物时递增,或者需要访问外部IO(如写入文档),这就是您的情况。
要测试文档是否已正确更新,您可能需要考虑实施许多工程师开始所谓的“端到端”测试。 This是一篇不错的中型文章,尽管它并不是权威资料,但它提供了更多的见识。
您可能已经了解的 Karma是一种工具,可让您在一个或多个浏览器中运行端到端测试。您期望sampleFunction
返回一个值,但是您应该做的是测试文档的内容现在为"hello world"
,而不是以前的内容。 Here's一篇不错的文章,尽管过时,但说明了如何做到这一点。
答案 1 :(得分:-1)
我认为.toContain在数组中查找项目,并且不能像indexOf()一样工作 https://jestjs.io/docs/en/expect#tocontainitem
尝试一下 Expect(sampleFunction()。indexOf('hello')。toBe(!-1);