簡體   English   中英

Jasmine 異步測試生成

[英]Jasmine Async test generation

假設我們有一個 promise 執行大量操作並返回輔助函數。 一個平庸的例子:

const testPromise = testFn => () => {
    const helper = Promise.resolve({testHelper: () => 'an helper function'}) // I/O Promise that returns an helper for testing
    return helper.then(testFn).finally(() => console.log('tear down'));
}

// This describe would work as expected
describe('Async test approach', () => {
    it('A test', testPromise(async ({testHelper}) => {
        expect(testHelper()).toBe('an helper function')
    }))
})

// This part doesn't work

describe('Async describe approach', testPromise(async ({testHelper}) => {

    it('Test 1', () => {
        expect(testHelper()).toBe('an helper function')
    })

    it('Test 2', () => {
        expect(testHelper()).not.toBe('A chair')
    })
}))

}

我想要實現的是類似於第二個示例,我可以在 describe 中使用異步代碼而無需重新評估testPromise

describe不處理異步,所以我什至無法正確循環和創建動態測試。

我確實閱讀了很多評論,說describe應該只是對測試進行分組的一種簡單方法,但是......然后......有人如何根據 I/O 結果進行異步生成的測試?

謝謝

= 額外考慮 =

關於你們好心添加的所有評論,我應該添加一些額外的細節......

我很清楚必須同步定義測試:),這正是問題開始的地方。 我完全不同意這一點,我試圖找到一個替代方案,避免之前/之后並在不指定外部變量的情況下執行它。 在 Jest 問題中,有一個開放的問題可以解決這個問題,似乎他們確實同意使 describe async 但他們不會這樣做。 原因是...... Jest 正在使用描述的 Jasmine 實現,這個“修復”應該在那里完成。

我想盡可能避免beforeAllafterAll 我的目的是創建一種簡單(且簡潔)的方式來定義根據我的需求量身定制的集成測試,而無需讓用戶擔心初始化和拆除周圍的東西。 我將繼續使用上述示例 1 的風格,這對我來說似乎是最好的解決方案,即使這顯然是一個更長的過程。

看看定義測試 醫生說:

為了讓 Jest 能夠收集您的測試,必須同步定義測試。

這是定義測試用例的原則。 這意味着應該同步定義it function 。 這就是為什么您的第二個示例不起作用的原因。

一些 I/O 操作應該在beforeAllafterAllbeforeEachafterEach方法中完成,以准備您的測試替身和夾具。 測試應盡可能與外部環境隔離。

如果一定要這么做,或許可以將動態獲取的testHelper function寫入一個static js文件,然后同步測試

如前所述, describe用於對測試進行分組。

這可以通過beforeAll來實現。 由於beforeAll應該以任何方式調用,因此可以將其移至testPromise

const prepareHelpers = (testFn) => {
  beforeAll(() => {
    ...
    return helper.then(testFn);
  })
}

describe('Async describe approach', () => {
  let testHelper;

  prepareHelpers(helpers => { testHelper = helpers.testHelper });
  ...

暫無
暫無

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

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