用React Native和内容丰富的Jest测试

时间:2018-07-03 11:54:32

标签: javascript reactjs react-native jestjs contentful

我正在尝试用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时,也会打印未定义的值。

1 个答案:

答案 0 :(得分:0)

这里有几个问题:

  1. toEqual匹配器接收单个值参数;您正在发送2 参数,因此实际上只使用了第一个。
  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
    });
}

注意:我实际上没有运行或测试上述代码,但这是一般概念。