如何在其中带有“ document.write”的javascript函数中编写单元测试用例

时间:2018-10-30 17:44:26

标签: javascript unit-testing jasmine karma-jasmine document.write

我有一个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”,测试用例就会失败。

能否请您提出为此功能编写单元测试用例的正确方法?

非常感谢!

2 个答案:

答案 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);