簡體   English   中英

使用React Native和Contentful進行Jest測試

[英]Jest Testing with React Native and Contentful

我試圖用Jest測試我的React Native Application。 我使用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. toEqual匹配器接收單個值參數; 您正在發送2個參數,因此只有第一個參數被有效使用。
  2. 在這種情況下, client是一個函數,您正在嘗試將其與字符串進行比較。 無論客戶端不是字符串,在您的情況下它也是undefined ,因此消息“預期未定義但接收到字符串”。 你沒有在這里測試空間或accessToken,你正在測試客戶端。

我不完全確定你在這里要測試的是什么,但這與Contentful沒有特別的關系。

我假設客戶端初始化部分位於代碼中的某個位置,您希望進行單元測試(而不是在測試文件中初始化)。 我建議一個測試,檢查在執行代碼時是否使用您期望的參數調用contentfulcreateClient函數; 沒有必要測試客戶端是否已創建 - Contentful負責確保它們返回有效的客戶端對象。 重要的是您傳遞了應用程序所需的正確“space”和“accessToken”參數。

一般來說,應該模擬外部服務,您應該只測試自己的邏輯和與外部服務的交互。

為簡單起見,我們假設初始化客戶端的代碼如下所示:

//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
    });
}

測試可能看起來像這樣:

//client.test.js

describe('contentful client', () => {
    let contentful;
    let initializeClient;

    beforeEach(() => {
        jest.mock('contentful');

        contentful = require('contentful');
        initializeClient = require('./client').default;
    });

    it('should initialize the contentful client with the correct params', async () => {
        initializeClient();
        expect(contentful.createClient).toHaveBeenCalledWith({
            space: 'w20789877',
            accessToken: '883829200101001047474747737'
        });
    });
});

注意 :我實際上並沒有運行或測試上面的代碼,但這是一般概念。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM