当我从业力开始在摩卡上运行单元测试时,我的单元测试用例开始失败,之前我们使用业力和浏览器运行测试用例,但是它运行得很好,
1) common/browser-detection
returns the mock object when there is no userAgent:
TypeError: Cannot read property 'navigator' of undefined
at Context.<anonymous> (packages/node_modules/@webex/plugin-meetings/test/unit/spec/common/browser-detection.js:115:41)
at processImmediate (internal/timers.js:464:21)
2) plugin-meetings
meeting index
Public Api Contract
#addMedia
should reject promise if user already in left state:
AssertionError: expected [ReferenceError: navigator is not defined] to be an instance of UserNotJoinedError
at /Users/nswarnka/Documents/Neeraj/Projects/upstream/webex-js-sdk/packages/node_modules/@webex/plugin-meetings/test/unit/spec/meeting/index.js:763:20Package.json
"test": "node ./tooling/index.js test",
"circleci:local": "circleci local execute -c .circleci/github.config.yml",测试文件-
对于这里的导航器失败,TypeError:无法读取未定义的属性“导航器”
it('returns the mock object when there is no userAgent', () => {
Object.defineProperty(global.window.navigator, 'userAgent', {
get: () => undefined,
configurable: true
});ReferenceError:未定义导航器
/**
* proxy to browser navigator.mediaDevices.enumerateDevices()
* @returns {Promise}
*/
Media.getDevices = () => {
if (navigator && navigator.mediaDevices && navigator.mediaDevices.enumerateDevices) {
return navigator.mediaDevices.enumerateDevices();
}
return Promise.reject(new MediaError('enumerateDevices not supported.'));
};发布于 2022-04-07 12:00:30
访问global.window.navigator是一个错误,无论是在浏览器(其中没有定义global )还是在Node.js (其中没有全局window对象,也没有navigator)。
如果要在浏览器中运行该测试,您可以重新定义userAgent on navigator (或等效于window.navigator),即
Object.defineProperty(navigator, 'userAgent', {
get: () => undefined,
configurable: true
});但是,如果您在没有DOM仿真设置的情况下在Node.js中运行该测试,您将遇到一个错误,因为navigator是未定义的。当然,您可以在模拟navigator之前模拟userAgent,但是为了使测试通过,您还需要模拟navigator.mediaDevices和navigator.mediaDevices.enumerateDevices,最后只测试模拟代码本身。
https://stackoverflow.com/questions/71777757
复制相似问题