istanbul 繞過 window 變數儲存覆蓋率資料
參考文章:
https://testerhome.com/topics/23698
https://testerhome.com/topics/8919
WEB 端部分完全參照了這兩篇文章的內容。
大體上還是沿用了 RN 的覆蓋率方法,在這裡就不再贅述,有興趣的請移步上文的連結。
起因
公司的專案使用的是 WEEX,而不是 RN。
WEEX 有一個地方和 RN 非常不一樣,就是在移動平臺,window 變數被停用了。
具體在這裡:https://weex.apache.org/zh/guide/platform-difference.html
所以,直接使用 window 去儲存覆蓋率資料會失敗。
那沒得說,只好找一個新的變數去取代 window 做儲存。
結果
中間當然走了很多彎路,但是也沒什麼值得說的,直接上結果。
當前是在 src 目錄增加一個 person_global.js 檔案,裡面只有一個空的字典。
// src/person_global.js
export const p_global = {}
然後在所有插樁後的 JS 檔案中,修改檔案內容。
修改檔案內容我使用的是 python 指令碼,畢竟比較順手。
// 任意插樁後的JS檔案
import { p_global } from '@/person_global' //新增
function cov_1kb7rxg7li() {
var path = "/home/app/src/api/api.js";
var hash = "7332365d3e2a48aa04ad78999bdebfefc3a21e3a";
// var global = new Function("return this")(); 這是原有的程式碼
var global = p_global //新增
var gcv = "__coverage__";
這樣的話,就能把覆蓋率資料的儲存變數從 window 變為 p_global。
至於具體裡面的資料是怎麼儲存的,大家可以自己去試一試,我只能說,JS 的字典是真的靈活。
做完這些後,只需要在 APP 的首頁檔案中加上以下程式碼。
// APP.vue
import { p_global } from '@/person_global'
var stream = weex.requireModule('stream')
export default {
created(){
stream.fetch({
method: 'POST',
url: 'http://10.96.2.20:8889/coverage/client',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify(p_global.__coverage__)
}, function(ret) {
if (ret.ok) {
console.log('[Coverage] upload success')
}
else {
console.log('[Coverage] upload failed')
}
})
}
}
我並沒有使用定時上傳的方式,而是選擇了每次載入首頁的時候才會觸發上傳,總之只是策略不同而已。
因為網上相關的資料非常少,所以這裡做一個記錄吧,希望可以幫到一些同學。
相關文章
- 程式碼覆蓋率與測試覆蓋率比較
- 模型評估過程中:命中率/覆蓋率模型
- PHP變數覆蓋漏洞小結PHP變數
- 圖資料庫 Nebula Graph 的程式碼變更測試覆蓋率實踐資料庫
- idea2022.1 檢視單測覆蓋率展示分支覆蓋率Idea
- pHp程式碼覆蓋率PHP
- 資料庫儲存過程資料庫儲存過程
- 談如何正確理解 IP 資料的覆蓋率,兼談正確率~
- java覆蓋率檢測-jacocoJava
- 自動化會提高測試覆蓋率,那測試覆蓋率是什麼?
- MySql資料庫——儲存過程MySql資料庫儲存過程
- iOS 覆蓋率檢測原理與增量程式碼測試覆蓋率工具實現iOS
- 【資料庫】資料庫儲存過程(一)資料庫儲存過程
- 儲存卡變為RAW,如何進行儲存卡資料救援
- go 程式碼覆蓋率測試Go
- 單元測試接入覆蓋率
- Jacoco--測試覆蓋率工具
- 什麼是程式碼覆蓋率
- 造數儲存過程儲存過程
- 【SqlServer】清除過期資料的儲存過程SQLServer儲存過程
- 改變出版行業數字化確保資料儲存安全行業
- 明解資料庫------資料庫儲存演變史資料庫
- mysql儲存資料,varchar型別中的資料變成了科學計數法?MySql型別
- PouchContainer 整合測試覆蓋率統計AI
- 測試覆蓋率二改實現
- 如何提高全城wifi訊號覆蓋率WiFi
- JaCoCo計算程式碼覆蓋率原理
- Mockito提升單元測試覆蓋率Mockito
- 覆蓋率檢查工具:JaCoCo 食用指南
- 測試覆蓋率 之 Cobertura的使用
- 資料儲存--檔案儲存
- 在做服務端程式碼覆蓋率或者準備做程式碼覆蓋率的兄弟們,來聊聊???服務端
- 使用儲存過程(PL/SQL)向資料庫中儲存BLOB物件儲存過程SQL資料庫物件
- Mysql儲存過程 變數,條件,迴圈語句用法MySql儲存過程變數
- 儲存過程_造使用者資料儲存過程
- MySQL的寫入資料儲存過程MySql儲存過程
- JS 變數儲存?棧 & 堆?NONONO!JS變數
- 2023上半年美國人工智慧工具覆蓋率(附原資料表) 人工智慧