原文作者:Alex Jover
譯者:程式猿何大叔
特別宣告:本文是作者 Alex Jover 釋出在 VueDose 上的一個系列。
版權歸作者所有。
譯者在翻譯前已經和作者溝通得到了翻譯整個系列的授權。
為了不影響大家閱讀,獲得授權的記錄會放在本文的最後。
正文
如果你進入了測試階段,你可能已經開始時候用了 Jest:Facebook 建立的一體化測試框架。現在它是最流行的測試框架之一,而且我從一開始就使用至今。
你也可能在使用由 Edd Yerburg 開發的 vue-test-utils,它是官方的單元測試實用工具庫,能讓我們的測試工作變得更方便。
下面給出同時使用了 Jest 和 vue-test-utils 的測試案例:
it('has a message list of 3 elements', () => {
const cmp = createCmp({ messages: ['msg-1', 'msg-2', 'msg-3'] })
expect(cmp.is('ul')).toBe(true)
expect(cmp.find('.message-list').isEmpty()).toBe(false)
expect(cmp.find('.message-list').length).toBe(3)
})
it('has a message prop rendered as a data-message attribute', () => {
const cmp = createCmp({ message: 'Cat' })
expect(cmp.contains('.message')).toBe(true)
expect(cmp.find('.message').props('message').toBe('Cat')
expect(cmp.find('.message').attributes('data-message').toBe('Cat')
// Change the prop message
cmp.setProps({ message: 'Dog' })
expect(cmp.find('.message').props('message').toBe('Dog')
expect(cmp.find('.message').attributes('data-message').toBe('Dog')
})
複製程式碼
正如上面所示,vue-test-utils 給我們提供了很多方法來檢查 props、classes、content、search 等等。另外,它還給我們提供了能改變屬性的方法,像 setProps
,這個很贊。
這個測試案例有著非常明確的斷言:“找到帶有 ‘message’ 樣式名的元素,並檢查它是否有設定為 ‘cat’ 的 ‘data-message’ 屬性”。
但如果我告訴你,有了快照測試,你再也不需要做以上的工作。
基本上,你可以利用 snapshots 重寫以前的測試案例,如下:
it("has a message list of 4 elements", () => {
const cmp = createCmp({ messages: ["msg-1", "msg-2", "msg-3"] });
expect(cmp.element).toMatchSnapshot();
});
it("has a message prop rendered as a data-message attribute", () => {
const cmp = createCmp({ message: "Cat" });
expect(cmp.element).toMatchSnapshot();
cmp.setProps({ message: "Dog" });
expect(cmp.element).toMatchSnapshot();
});
複製程式碼
測試的結果還是一樣的,有時候你還能在快照中找到更多的內容。
注意到在這個測試案例中,我就僅僅在斷言表示式中使用了 toMatchSnapshot
方法,沒有其他了。這能讓單元測試變得更簡單和更快速,因為我們不再需要單獨檢查特定的屬性了。
隨之而來的是,單元測試的動態性也改變了,我們不再寫專門的斷言表示式,而是可以將元件設定成任何你想要的狀態,然後給它拍個快照。
快照意味著斷言渲染狀態:它們描述了元件被賦予一個狀態時是如何被渲染的,然後拍攝快照,並在比較中校驗其有效性。
記著不要通過給單元測試「拍攝快照」來決定你想要的東西,而是取決於你想要去測試什麼,以避免本末倒置。
有這麼一個方法進行單元測試,我已經受益匪淺了。但是如果你需要去閱讀、瞭解、學習更多,你可以購買我的書本 Testing Vue.js Components with Jest。上週我在其中加入了全新的一個章節,專門用來講述快照測試,包括如下:
- 重新思考快照
- 為什麼、如何、什麼時候使用快照
- 什麼時候不使用
- 示例程式碼
請與我交流你的思考,你可以在推特上找到 我。
你可以線上閱讀這篇 原文,裡面有可供複製貼上的原始碼。如果你喜歡這個系列的話,請分享給你的同事們!
結語
此係列的其他文章,會同步系列官網的釋出情況,及時地翻譯釋出到掘金。請持續關注「程式猿何大叔」,相信我會給大家帶來更多優質的內容,不要忘了點贊~
如果想要了解譯者的更多,請查閱如下:
- 個人部落格:blog.hadesz.com
- 個人 github 倉庫:github.com/hadeshe93
- 個人微信公眾號:搜尋「程式猿何大叔」
請求翻譯授權記錄
覺得本文不錯的話,分享一下給小夥伴吧~