Javascript 如何使用jasmine对局部变量进行单元测试?

Javascript 如何使用jasmine对局部变量进行单元测试?,javascript,unit-testing,jasmine,Javascript,Unit Testing,Jasmine,我试图在下面的代码中测试两个局部变量,language和translationbj: public loadDictionary () { this.source$ = this.httpService .get(...) .map((response) => { const language = this.lang // this.lang contains a value like 'en_GB

我试图在下面的代码中测试两个局部变量,
language
translationbj

public loadDictionary () {

    this.source$ = this.httpService
            .get(...)
            .map((response) => {
                const language = this.lang // this.lang contains a value like  'en_GB';
                const translationObj = this.convertStringsToArrays(response.data.translations) // contains an object like {'name' : 'Donald', 'age': '16'};

                // other stuff going on here
            });

        return this.source$;
    }
}
language
返回一个类似“en_GB”的字符串,
translationbj
返回一个键/值对象,如
{'name':'Donald','age':'16'}

我有两个问题

  • 如何在我的测试中模拟这两个变量的数据
  • 我应该测试变量(
    language
    )还是分配给它的值(
    this.lang

  • 您无法访问它们,因为它们位于闭合内部。您需要公开它们来监视它们。像这样的私有内容不是您正在测试的单元的公共API的一部分。您的单元测试不应该关心内部发生了什么,而应该关心单元作为一个整体的行为。假设它以某种方式使用这些变量并返回其他可见的结果——这就是您应该在单元测试中检查的内容。谢谢你们@詹姆斯-是的,没错,这些变量还有其他作用。我为loadDictionary()编写的测试确实通过了,但是一个代码覆盖率工具告诉我this.lang和this.convertstringstoarray在测试中没有涉及到的地方。所以我猜这些函数需要自己的测试,因为它们在闭包中,所以您无法访问它们。您需要公开它们来监视它们。像这样的私有内容不是您正在测试的单元的公共API的一部分。您的单元测试不应该关心内部发生了什么,而应该关心单元作为一个整体的行为。假设它以某种方式使用这些变量并返回其他可见的结果——这就是您应该在单元测试中检查的内容。谢谢你们@詹姆斯-是的,没错,这些变量还有其他作用。我为loadDictionary()编写的测试确实通过了,但是一个代码覆盖率工具告诉我this.lang和this.convertstringstoarray在测试中没有涉及到的地方。所以我想这些函数需要自己的测试