[英]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時,也會打印出未定義的值。
這里有幾個問題:
toEqual
匹配器接收單個值參數; 您正在發送2個參數,因此只有第一個參數被有效使用。 client
是一個函數,您正在嘗試將其與字符串進行比較。 無論客戶端不是字符串,在您的情況下它也是undefined
,因此消息“預期未定義但接收到字符串”。 你沒有在這里測試空間或accessToken,你正在測試客戶端。 我不完全確定你在這里要測試的是什么,但這與Contentful沒有特別的關系。
我假設客戶端初始化部分位於代碼中的某個位置,您希望進行單元測試(而不是在測試文件中初始化)。 我建議一個測試,檢查在執行代碼時是否使用您期望的參數調用contentful
的createClient
函數; 沒有必要測試客戶端是否已創建 - 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.