我正在尝试用Jest测试我的React Native应用程序。我正在使用Contentful作为CMS来保存我的后端信息。我目前正在尝试测试是否正在初始化正确的客户端。
这是我用来初始化客户端的代码:
var client = contentful.createClient({
space: 'w20789877', // whatever the space id is
accessToken: '883829200101001047474747737' // some accessToken
})
这是我用来测试初始化客户端的代码:
describe ('should initialize the correct client', () => {(
it('should initialize the correct client info from contentful', () =>{
expect(client).toEqual('w20789877', '883829200101001047474747737')
});
)};
但是,我收到一条错误消息,指出:
Difference: Comparing two different types of values. Expected undefined but received string.
由于某种原因,我收到的空间和accessToken未定义,但我正确初始化了客户端,因为以后可以使用该空间。即使尝试打印空间和accessToken时,也会打印未定义的值。
答案 0 :(得分:0)
这里有几个问题:
toEqual
匹配器接收单个值参数;您正在发送2
参数,因此实际上只使用了第一个。client
是一个函数,您正尝试将其与字符串进行比较。不管客户端不是字符串,在您的情况下,它也是undefined
,因此消息“期望未定义但已接收到字符串”。您不是在这里测试空间或accessToken,而是在测试客户端。我不确定您要在此处进行什么测试,但这与Contentful无关。
我假设客户端初始化部分在您要进行单元测试的代码中(而不是在测试文件中初始化)。我建议进行一个测试,以检查在执行代码时是否以预期的参数调用了createClient
的{{1}}函数。无需测试是否创建了客户端-Contentful的责任是确保它们返回有效的客户端对象。重要的是,您传递了应用程序所需的正确“ space”和“ accessToken”参数。
通常来说,应该模拟外部服务,并且应该只测试自己的逻辑以及与外部服务的交互。
为简单起见,可以说初始化客户端的代码如下:
contentful
测试可能看起来像这样:
//client.js
var contentful = require('contentful')
export default function initializeClient() {
var client = contentful.createClient({
space: 'w20789877', // whatever the space id is
accessToken: '883829200101001047474747737' // some accessToken
});
}
注意:我实际上没有运行或测试上述代码,但这是一般概念。