Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
李少辉-开发者
gitlab-foss
提交
2e748668
G
gitlab-foss
项目概览
李少辉-开发者
/
gitlab-foss
通知
15
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
G
gitlab-foss
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
2e748668
编写于
3月 28, 2019
作者:
W
Winnie Hellmann
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Copy missing helpers from Karma to Jest
Copy missing helpers from Karma to Jest
上级
a85fd76f
变更
11
隐藏空白更改
内联
并排
Showing
11 changed file
with
235 addition
and
0 deletion
+235
-0
spec/frontend/helpers/class_spec_helper.js
spec/frontend/helpers/class_spec_helper.js
+9
-0
spec/frontend/helpers/locale_helper.js
spec/frontend/helpers/locale_helper.js
+11
-0
spec/frontend/helpers/scroll_into_view_promise.js
spec/frontend/helpers/scroll_into_view_promise.js
+28
-0
spec/frontend/helpers/set_timeout_promise_helper.js
spec/frontend/helpers/set_timeout_promise_helper.js
+4
-0
spec/frontend/helpers/user_mock_data_helper.js
spec/frontend/helpers/user_mock_data_helper.js
+14
-0
spec/frontend/helpers/vue_component_helper.js
spec/frontend/helpers/vue_component_helper.js
+18
-0
spec/frontend/helpers/vue_resource_helper.js
spec/frontend/helpers/vue_resource_helper.js
+11
-0
spec/frontend/helpers/vue_test_utils_helper.js
spec/frontend/helpers/vue_test_utils_helper.js
+19
-0
spec/frontend/helpers/vuex_action_helper.js
spec/frontend/helpers/vuex_action_helper.js
+104
-0
spec/frontend/helpers/wait_for_attribute_change.js
spec/frontend/helpers/wait_for_attribute_change.js
+16
-0
spec/frontend/helpers/wait_for_promises.js
spec/frontend/helpers/wait_for_promises.js
+1
-0
未找到文件。
spec/frontend/helpers/class_spec_helper.js
0 → 100644
浏览文件 @
2e748668
export
default
class
ClassSpecHelper
{
static
itShouldBeAStaticMethod
(
base
,
method
)
{
return
it
(
'
should be a static method
'
,
()
=>
{
expect
(
Object
.
prototype
.
hasOwnProperty
.
call
(
base
,
method
)).
toBeTruthy
();
});
}
}
window
.
ClassSpecHelper
=
ClassSpecHelper
;
spec/frontend/helpers/locale_helper.js
0 → 100644
浏览文件 @
2e748668
/* eslint-disable import/prefer-default-export */
export
const
setLanguage
=
languageCode
=>
{
const
htmlElement
=
document
.
querySelector
(
'
html
'
);
if
(
languageCode
)
{
htmlElement
.
setAttribute
(
'
lang
'
,
languageCode
);
}
else
{
htmlElement
.
removeAttribute
(
'
lang
'
);
}
};
spec/frontend/helpers/scroll_into_view_promise.js
0 → 100644
浏览文件 @
2e748668
export
default
function
scrollIntoViewPromise
(
intersectionTarget
,
timeout
=
100
,
maxTries
=
5
)
{
return
new
Promise
((
resolve
,
reject
)
=>
{
let
intersectionObserver
;
let
retry
=
0
;
const
intervalId
=
setInterval
(()
=>
{
if
(
retry
>=
maxTries
)
{
intersectionObserver
.
disconnect
();
clearInterval
(
intervalId
);
reject
(
new
Error
(
`Could not scroll target into viewPort within
${
timeout
*
maxTries
}
ms`
));
}
retry
+=
1
;
intersectionTarget
.
scrollIntoView
();
},
timeout
);
intersectionObserver
=
new
IntersectionObserver
(
entries
=>
{
if
(
entries
[
0
].
isIntersecting
)
{
intersectionObserver
.
disconnect
();
clearInterval
(
intervalId
);
resolve
();
}
});
intersectionObserver
.
observe
(
intersectionTarget
);
intersectionTarget
.
scrollIntoView
();
});
}
spec/frontend/helpers/set_timeout_promise_helper.js
0 → 100644
浏览文件 @
2e748668
export
default
(
time
=
0
)
=>
new
Promise
(
resolve
=>
{
setTimeout
(
resolve
,
time
);
});
spec/frontend/helpers/user_mock_data_helper.js
0 → 100644
浏览文件 @
2e748668
export
default
{
createNumberRandomUsers
(
numberUsers
)
{
const
users
=
[];
for
(
let
i
=
0
;
i
<
numberUsers
;
i
+=
1
)
{
users
.
push
({
avatar
:
'
https://gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?s=80&d=identicon
'
,
id
:
i
+
1
,
name
:
`GitLab User
${
i
}
`
,
username
:
`gitlab
${
i
}
`
,
});
}
return
users
;
},
};
spec/frontend/helpers/vue_component_helper.js
0 → 100644
浏览文件 @
2e748668
/**
* Replaces line break with an empty space
* @param {*} data
*/
export
const
removeBreakLine
=
data
=>
data
.
replace
(
/
\r?\n
|
\r
/g
,
'
'
);
/**
* Removes line breaks, spaces and trims the given text
* @param {String} str
* @returns {String}
*/
export
const
trimText
=
str
=>
str
.
replace
(
/
\r?\n
|
\r
/g
,
''
)
.
replace
(
/
\s\s
+/g
,
'
'
)
.
trim
();
export
const
removeWhitespace
=
str
=>
str
.
replace
(
/
\s\s
+/g
,
'
'
);
spec/frontend/helpers/vue_resource_helper.js
0 → 100644
浏览文件 @
2e748668
// eslint-disable-next-line import/prefer-default-export
export
const
headersInterceptor
=
(
request
,
next
)
=>
{
next
(
response
=>
{
const
headers
=
{};
response
.
headers
.
forEach
((
value
,
key
)
=>
{
headers
[
key
]
=
value
;
});
// eslint-disable-next-line no-param-reassign
response
.
headers
=
headers
;
});
};
spec/frontend/helpers/vue_test_utils_helper.js
0 → 100644
浏览文件 @
2e748668
/* eslint-disable import/prefer-default-export */
const
vNodeContainsText
=
(
vnode
,
text
)
=>
(
vnode
.
text
&&
vnode
.
text
.
includes
(
text
))
||
(
vnode
.
children
&&
vnode
.
children
.
filter
(
child
=>
vNodeContainsText
(
child
,
text
)).
length
);
/**
* Determines whether a `shallowMount` Wrapper contains text
* within one of it's slots. This will also work on Wrappers
* acquired with `find()`, but only if it's parent Wrapper
* was shallowMounted.
* NOTE: Prefer checking the rendered output of a component
* wherever possible using something like `text()` instead.
* @param {Wrapper} shallowWrapper - Vue test utils wrapper (shallowMounted)
* @param {String} slotName
* @param {String} text
*/
export
const
shallowWrapperContainsSlotText
=
(
shallowWrapper
,
slotName
,
text
)
=>
!!
shallowWrapper
.
vm
.
$slots
[
slotName
].
filter
(
vnode
=>
vNodeContainsText
(
vnode
,
text
)).
length
;
spec/frontend/helpers/vuex_action_helper.js
0 → 100644
浏览文件 @
2e748668
const
noop
=
()
=>
{};
/**
* Helper for testing action with expected mutations inspired in
* https://vuex.vuejs.org/en/testing.html
*
* @param {Function} action to be tested
* @param {Object} payload will be provided to the action
* @param {Object} state will be provided to the action
* @param {Array} [expectedMutations=[]] mutations expected to be committed
* @param {Array} [expectedActions=[]] actions expected to be dispatched
* @param {Function} [done=noop] to be executed after the tests
* @return {Promise}
*
* @example
* testAction(
* actions.actionName, // action
* { }, // mocked payload
* state, //state
* // expected mutations
* [
* { type: types.MUTATION}
* { type: types.MUTATION_1, payload: jasmine.any(Number)}
* ],
* // expected actions
* [
* { type: 'actionName', payload: {param: 'foobar'}},
* { type: 'actionName1'}
* ]
* done,
* );
*
* @example
* testAction(
* actions.actionName, // action
* { }, // mocked payload
* state, //state
* [ { type: types.MUTATION} ], // expected mutations
* [], // expected actions
* ).then(done)
* .catch(done.fail);
*/
export
default
(
action
,
payload
,
state
,
expectedMutations
=
[],
expectedActions
=
[],
done
=
noop
,
)
=>
{
const
mutations
=
[];
const
actions
=
[];
// mock commit
const
commit
=
(
type
,
mutationPayload
)
=>
{
const
mutation
=
{
type
};
if
(
typeof
mutationPayload
!==
'
undefined
'
)
{
mutation
.
payload
=
mutationPayload
;
}
mutations
.
push
(
mutation
);
};
// mock dispatch
const
dispatch
=
(
type
,
actionPayload
)
=>
{
const
dispatchedAction
=
{
type
};
if
(
typeof
actionPayload
!==
'
undefined
'
)
{
dispatchedAction
.
payload
=
actionPayload
;
}
actions
.
push
(
dispatchedAction
);
};
const
validateResults
=
()
=>
{
expect
({
mutations
,
actions
,
}).
toEqual
({
mutations
:
expectedMutations
,
actions
:
expectedActions
,
});
done
();
};
const
result
=
action
(
{
commit
,
state
,
dispatch
,
rootState
:
state
,
rootGetters
:
state
,
getters
:
state
},
payload
,
);
return
new
Promise
(
resolve
=>
{
setImmediate
(
resolve
);
})
.
then
(()
=>
result
)
.
catch
(
error
=>
{
validateResults
();
throw
error
;
})
.
then
(
data
=>
{
validateResults
();
return
data
;
});
};
spec/frontend/helpers/wait_for_attribute_change.js
0 → 100644
浏览文件 @
2e748668
export
default
(
domElement
,
attributes
,
timeout
=
1500
)
=>
new
Promise
((
resolve
,
reject
)
=>
{
let
observer
;
const
timeoutId
=
setTimeout
(()
=>
{
observer
.
disconnect
();
reject
(
new
Error
(
`Could not see an attribute update within
${
timeout
}
ms`
));
},
timeout
);
observer
=
new
MutationObserver
(()
=>
{
clearTimeout
(
timeoutId
);
observer
.
disconnect
();
resolve
();
});
observer
.
observe
(
domElement
,
{
attributes
:
true
,
attributeFilter
:
attributes
});
});
spec/frontend/helpers/wait_for_promises.js
0 → 100644
浏览文件 @
2e748668
export
default
()
=>
new
Promise
(
resolve
=>
requestAnimationFrame
(
resolve
));
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录