Angular.js: angular-mock 1.5.1 TypeError: undefined ليس مُنشئًا (بتقييم 'angular.element.cleanData (cleanUpNodes)')

تم إنشاؤها على ١٦ مارس ٢٠١٦  ·  67تعليقات  ·  مصدر: angular/angular.js

تعمل اختباراتي بشكل جيد مع angular-mock 1.5.0 ولكن مع 1.5.1 تفشل جميع الاختبارات مع:
TypeError: undefined is not a constructor (evaluating 'angular.element.cleanData(cleanUpNodes)') in ../node_modules/angular-mocks/angular-mocks.js (line 2776) $$cleanup@../node_modules/angular-mocks/angular-mocks.js:2776:32 $$afterEach@../node_modules/angular-mocks/angular-mocks.js:2746:23

investigation more info regression bug

التعليق الأكثر فائدة

كنت أرى هذه المشكلة أيضًا في اختباراتنا بعد محاولة الترقية إلى الإصدار 1.5.2. تغيير الخط 2776 للزاوية mocks.js من:
angular.element.cleanData(cleanUpNodes);
ل:
if (angular.element.cleanData) angular.element.cleanData(cleanUpNodes);

أصلح المشكلة. في حالتنا ، نحاول التجسس على العنصر الزاوي لأسباب مختلفة.

ال 67 كومينتر

هذا غريب ، لأنه لم يتم استدعاء أي مُنشئ في هذا الجزء من التعليمات البرمجية. ربما يمكنك تقديم المزيد من المعلومات؟ نسخة من اختبار فاشل ، ويفضل أن يكون اختبارًا يمكننا إجراؤه.

هنا يمكنك العثور على اختبار ، لا يفعل شيئًا سوى فشل كل اختبار لدينا (فقط للإصدار 1.5.1 ، 1.5.0 جيد).
عداء اختباري كارما ، إطار اختبار ياسمين. إعداد المشروع "Foundation for Apps"
https://github.com/HamburgOOU/hoou-webapp/blob/master/test/controllerTest/AboutControllerTest.js

يبدو أنك تستخدم جهاز توجيه ui ، هل هذا صحيح؟
هل يمكنك محاولة إنشاء اختبار يتم تشغيله هنا: http://plnkr.co/edit/tpl : vojSWqpk1yBjQbbPeXRH؟

كاقتراح ، يجب أيضًا محاولة إزالة التبعيات من الاختبار الخاص بك ، ومعرفة ما الذي يؤدي إلى حدوث الخطأ بالضبط (لديك الكثير من التبعيات في وحدة التطبيق)

نعم ، باستخدام جهاز التوجيه angular-ui-router (0.2.18).
ترومورو سأحاول إيجاد التبعية التي تسبب ذلك.

+1 ، أتلقى خطأ مشابهًا جدًا أثناء محاولة اختبار مزود.

TypeError: 'undefined' ليست دالة (تقييم 'angular.element.cleanData (cleanUpNodes)')
في ../node_modules/angular-mocks/angular-mocks.js:2776
في ../node_modules/angular-mocks/angular-mocks.js:2746

تحرير: يحدث هذا الخطأ مع الإصدار 1.5.1 ، عدت إلى 1.5.0 ويعمل كل شيء مرة أخرى.

petebacondarwin undefined is not a constructor هو الخطأ المشفر الذي يقدمه PhantomJS عندما تحاول استدعاء دالة لم يتم تعريفها. إنه يعادل خطأ Chrome a.something is not a function .

لقد حصلنا على خطأ مشابه في Angular / Mock 1.5.1 ، وهي ليست مشكلة في 1.5.0:

# PhantomJS
TypeError: undefined is not a constructor (evaluating 'angular.element('<div ng-app></div>').data('$injector', $injector)') 
    in /bower_components/angular-mocks/angular-mocks.js (line 2102)
    /bower_components/angular-mocks/angular-mocks.js:2102:69
    invoke@/bower_components/angular/angular.js:4443:22
    /bower_components/angular/angular.js:4261:43
    getService@/bower_components/angular/angular.js:4402:46
    invoke@/bower_components/angular/angular.js:4434:23
    /bower_components/angular/angular.js:4261:43
    getService@/bower_components/angular/angular.js:4402:46
    invoke@/bower_components/angular/angular.js:4434:23
    /bower_components/angular/angular.js:4261:43
    getService@/bower_components/angular/angular.js:4402:46
    invoke@/bower_components/angular/angular.js:4434:23
    /bower_components/angular/angular.js:4265:85
    forEach@/bower_components/angular/angular.js:336:24
    createInjector@/bower_components/angular/angular.js:4265:10
    workFn@/bower_components/angular-mocks/angular-mocks.js:2922:60

# Chrome
TypeError: angular.element(...).data is not a function
        at $get (/bower_components/angular-mocks/angular-mocks.js:2102:65)
        at Object.invoke (/bower_components/angular/angular.js:4443:17)
        at /bower_components/angular/angular.js:4261:37
        at getService (/bower_components/angular/angular.js:4402:39)
        at Object.invoke (/bower_components/angular/angular.js:4434:13)
        at /bower_components/angular/angular.js:4261:37
        at getService (/bower_components/angular/angular.js:4402:39)
        at Object.invoke (/bower_components/angular/angular.js:4434:13)
        at /bower_components/angular/angular.js:4261:37
        at getService (/bower_components/angular/angular.js:4402:39)

لاحظ أننا نستخدم jQuery جنبًا إلى جنب مع Angular.

هل يمكن أن يكون هذا مرتبطًا على الإطلاق بـ https://github.com/angular/angular.js/commit/75373dd4bdae6c6035272942c69444c386f824cd؟

تضمين التغريدة

angular.element (...) البيانات ليست دالة

هل أفهم بشكل صحيح أن angular.element(...) (وهو الاسم المستعار jQuery(...) إذا قمت بتحميل jQuery قبل Angular) يُرجع شيئًا لا يحتوي على طريقة data ؟ هذا يبدو غريبا. هل يمكنك تمكين "كسر الرفض" في Chrome DevTools وبعد ذلك ، عندما تضغط على هذا السطر ، تحقق مما يعرض بالضبط التعبيرات التالية:

  1. angular.element
  2. angular.element(...) (استبدل النقاط بما لديك بالفعل هناك)
  3. ... (استبدل النقاط بما كان لديك في angular.element )

شكرا!

لدينا مشكلة مماثلة منذ الزاوي v1.5.1.

should update data with success with redirect
          PhantomJS 2.1.1 (Linux 0.0.0)
        TypeError: undefined is not an object (evaluating '$location.path(interpolate(nextRoute.redirectTo, nextRoute.params)).search') in /project/app/bower_components/angular-route/angular-route.js (line 601)
        commitRoute@/project/app/bower_components/angular-route/angular-route.js:601:82
        $broadcast@/project/app/bower_components/angular/angular.js:17207:33
        afterLocationChange@/project/app/bower_components/angular/angular.js:13127:28
        /project/app/bower_components/angular/angular.js:13113:32
        $eval@/project/app/bower_components/angular/angular.js:16884:28
        $digest@/project/app/bower_components/angular/angular.js:16700:36
        flush@/project/app/bower_components/angular-mocks/angular-mocks.js:1779:45
        /project/app/modules/main/partners/partners.spec.js:338:31
        invoke@/project/app/bower_components/angular/angular.js:4625:24
        workFn@/project/app/bower_components/angular-mocks/angular-mocks.js:2933:26
        Error: [$rootScope:inprog] $digest already in progress
        http://errors.angularjs.org/1.5.1/$rootScope/inprog?p0=%24digest (line 17242)
        beginPhase@/project/app/bower_components/angular/angular.js:17242:88
        $digest@/project/app/bower_components/angular/angular.js:16680:19
        flush@/project/app/bower_components/angular-mocks/angular-mocks.js:1779:45
        /project/app/modules/main/partners/partners.spec.js:385:39
        invoke@/project/app/bower_components/angular/angular.js:4625:24
        workFn@/project/app/bower_components/angular-mocks/angular-mocks.js:2933:26
        inject@/project/app/bower_components/angular-mocks/angular-mocks.js:2902:46
        /project/app/modules/main/partners/partners.spec.js:381:23
        undefined

في هذه الحالة ، يظهر الخطأ دائمًا عندما تتضمن الاختبارات الدالة inject() . أعتقد أن spyOn($location, 'path'); في الدالة beforeEach قد تكون هي المشكلة.

describe('ctrl test', function () {
    beforeEach(inject(function ($controller, $location) {
        spyOn($location, 'path');
    }));

    describe('save()', function () {
        it('should work', function(){
            inject(function ($location) {
                // some test code
            });
        });
    });
});

@ 4kochi - مشكلتك هي في الواقع أنك تجسست على وظيفة لكنك لم تقدم تنفيذًا للجاسوس. بعبارة أخرى ، يؤدي استدعاء spyOn($location, path); تجاوز طريقة $location.path مع وظيفة تجسس ، لكن وظيفة التجسس هذه ترجع undefined . في وقت لاحق ، يحاول جهاز التوجيه الوصول إلى $location.path().search ، والذي يقول فعليًا undefined.search .

تحتاج إلى توفير تطبيق للجاسوس: إما مزيف أو ممر:

spyOn($location, 'path').andCallThrough();
spyOn($location, 'path').andCallFake(function(url) { return {...}; });

شكرا للنصيحةpetebacondarwin كانت لدي فكرة مماثلة. لكني أتساءل إذن لماذا يعمل نفس كود الاختبار بالضبط مع Angular 1.5.0؟ هل فاتني شيء؟

لدي نفس المشكلة عندما أستخدم inject ، على سبيل المثال

  beforeEach(inject(function($rootScope) {

  }));

@ dagda1 ، هل يمكنك تقديم المعلومات المذكورة في https://github.com/angular/angular.js/issues/14251#issuecomment -198276079 (بالإضافة إلى تتبع المكدس الدقيق للخطأ)؟

كنت أرى هذه المشكلة أيضًا في اختباراتنا بعد محاولة الترقية إلى الإصدار 1.5.2. تغيير الخط 2776 للزاوية mocks.js من:
angular.element.cleanData(cleanUpNodes);
ل:
if (angular.element.cleanData) angular.element.cleanData(cleanUpNodes);

أصلح المشكلة. في حالتنا ، نحاول التجسس على العنصر الزاوي لأسباب مختلفة.

في حالتنا ، نحاول التجسس على العنصر الزاوي لأسباب مختلفة.

هذا يفسر الخطأ.

angular.element هي "ميزة" أساسية جدًا ويعتمد عليها بشكل كبير داخليًا. لا أوصي بإيقافه. (يجب أن يكون التجسس عليه والسماح للأشياء بالمرور على ما يرام).

راجع للشغل ، يؤدي تغيير الرمز إلى if (angular.element.cleanData) angular.element.cleanData(cleanUpNodes); إلى حدوث تسرب للذاكرة يمكن أن يتسبب في تعطل الكارما في مواقع الاختبار الضخمة.
(نعم ، لقد حدث بالفعل: مبتسم :)

شكرًا gkalpak - لسوء الحظ ، يبدو أن أي نوع من التجسس (حتى الجاسوس الذي يتصل به فقط) يسبب نفس المشكلة. هل هناك أي عمل آخر في الأعمال أو اقتراحات أخرى لتجربتها؟

KeithPepin angular.element هو وحش صعب المراس . هل تحتاج حقًا للتجسس عليه؟ هل يمكنك إعطاء مثال على اختباراتك؟

لدي نفس المشكلة.
الحصول على رسالة خطأ:

PhantomJS 2.1.1 (Linux 0.0.0) 首页单元测试 首页内容控制器测试 调用获取数据接口 encountered a declaration exception FAILED
    ReferenceError: Can't find variable: module in /client/modules/bootstrap/test/bootstrap.spec.js (line 4)
    /client/modules/bootstrap/test/bootstrap.spec.js:4:23
    global code@/client/modules/bootstrap/test/bootstrap.spec.js:3:9
PhantomJS 2.1.1 (Linux 0.0.0): Executed 1 of 1 (1 FAILED) ERROR (0.041 secs / 0.001 secs)

اختباري على النحو التالي:

describe( '首页模块单元测试', function(){

    var $httpBackend,
        $indexFactory;

    beforeEach( module( 'Datatao.bootstrap' ) ); 

    beforeEach( inject( function( _$httpBackend_,  _IndexFactory_ ){ 
        $httpBackend    = _$httpBackend_;
        $indexFactory   = _IndexFactory_;
    }) ); 

    describe( '首页内容控制器测试', function(){
        it( '调用获取数据接口', function(){
            expect( true ).toBe( true ); 
        });
    });

});

وأنا أستخدم الزاوي 1.4.8 وجهاز التوجيه 0.2.15 الزاوي 1.5.2 ، ولكن بعد خفض المستوى الزاوي إلى 1.5.0 ، كل شيء على ما يرام.
إذا كنت بحاجة إلى مزيد من المعلومات ، من فضلك me

terminatorheart نحن لا ندعم استخدام إصدارات الزاوي والزاوي وهمية التي لا تتطابق. هل حاولت استخدام 1.5.2 لكليهما؟

لقد حاولت إعادة إنشاء هذه المشكلة هنا https://github.com/petebacondarwin/issue-14251
لكن karma start يعمل بشكل جيد بالنسبة لي. هل يمكنك اقتراح ما يجب أن يكون في المشروع حتى يفشل؟

أحصل على أخطاء مماثلة أثناء الانتقال من 1.5.0 إلى 1.5.1.

لدينا التعليمات البرمجية التالية للقيام ببعض الأعمال الإضافية قبل بدء تشغيل التطبيق. الآن فشلها مع الخطأ أدناه.

var ingMods = ['ng'، 'tcpInitModule'، 'mpyInitModule'] ؛
var initInjector = angular.injector (ingMods) ؛

var tcpMembershipSvc = initInjector.get ('tcpMembershipSvc') ،
// قم ببعض الأعمال مع مزود tcpMembershipSvc

// أخيرًا التمهيد
angular.bootstrap (document، ['tcpMainModule']) ؛

خطأ:
خطأ غير معلوم : [$
http://errors.angularjs.org/1.5.1/ $ حاقن / غير؟ p0 =٪ 24rootElementProvider٪…٪ 24rootElement٪ 20٪ 3C-٪ 20٪ 24location٪ 20٪ 3C-٪ 20٪ 24route٪ 20٪ 3C- ٪ 20٪ 24 الموقع

في اختبارات الوحدة ، فشل مع الخطأ أدناه.
خطأ: [$ حاقن: modulerr ] فشل في إنشاء وحدة ng بسبب:
TypeError: "undefined" ليس كائنًا (يتم تقييم "Function.prototype.bind.apply")
عند إنشاء (c: /app/internal_packages/angular/angular.js: 4640)

mlakmal هل يمكنك إنشاء عرض توضيحي

petebacondarwin لقد أضفت plnker أدناه.

https://plnkr.co/edit/J32cQo4Fo9fkiRH3pF3L؟p=preview

لقد لاحظت أيضًا أن خطأ اختبار الوحدة يأتي في الإصدار 1.5.0 أيضًا ...

mlakmal أعتقد أن المشكلة في plnkr تختلف عن مشكلة اختبار الوحدة. من المحتمل أن يكون له علاقة بالتغييرات في ngRoute.

يبدو أن مشكلة اختبار الوحدة ترجع إلى عدم تحديد Function.prototype.bind . هل تستخدم PhantomJS 1.x؟

تتعلق مشكلتك الأخرى (نوعًا ما) بالتغيير ngRoute (5e37b2a) - إنها في الواقع تكشف عن مشكلة موجودة بالفعل.

الحد الأدنى للتكاثر هو: angular.injector(['ng', 'ngRoute'])
الحد الأدنى من التكاثر (لا يتضمن ngRoute ) سيكون: angular.injector(['ng']).get('$location');

المشكلة هي أن خدمة $location تعتمد على $rootElement . لا يتم توفير $rootElement بواسطة Angular حتى يتم تمهيد التطبيق (لأنه لم يكن معروفًا قبل ذلك). عند محاولة إنشاء مثيل $location خارج سياق تطبيق bootstraped ، سيحاول الحاقن الحصول على $rootElement ويفشل ، لأنه في هذه المرحلة لا يوجد مزود مقابل $rootElement .

TBH ، لا يمكنني التفكير في سبب لتحميل ngRoute من حاقن مخصص ( mlakmal سأكون مهتمًا جدًا بمعرفة المزيد من التفاصيل حول حالة الاستخدام الخاصة بك ، حتى لو كان OOC فقط: مبتسم :).

حل بسيط ، هو تضمين وحدة إضافية وهمية توفر $rootElement :

angular.module('fakeRootElement', []).value('$rootElement', angular.element('<div></div>'));
var initInjector = angular.injector(['ng', 'InitModule', 'fakeRootElement']);

تحديث PLNKR

الآن ، فيما يتعلق بالمسألة الفعلية ، يستخدم $location $rootElement لاعتراض جميع الأحداث click والتعامل معها في وضع HTML5. يمكننا جعل هذا تبعية "اختيارية" (على سبيل المثال ، حقن $rootElement فقط إذا تم تعريفه أو توفير صورة وهمية $rootElement واستبدالها أثناء التمهيد).
السؤال هو هل يجب علينا؟

HIgkalpak ، أنت على صواب ، فنحن نستخدم Phantom JS 1.9.8 ونحاول الانتقال إلى الإصدار 2 ولكن تأخرنا من جانبنا بسبب تغييرات إصدار العقدة المطلوبة على وكلاء البناء (ما زلنا على العقدة v0.12.x) . لقد قمت بترقية PhantomJS محليًا إلى الإصدار 2 وتبدو اختبارات الوحدة الخاصة بي جيدة. هل لديك أي فكرة عن كيفية إصلاح مشكلة PhantomJS 1؟

عمل الحل الخاص بك بشكل جيد لإصلاح المشكلة على الحاقن. يمكنني التعايش مع هذا الإصلاح حتى ننتقل إلى AngularJS 2 في المستقبل (أحلم ...).

فيما يتعلق بحالة استخدامنا لـ ngRoute: لدينا بعض الخدمات التي تستخدم موفرين من ngRoute على تلك CommonModule و InitModule. لذلك كان علينا إضافة ngRoute كاعتماد على الوحدة النمطية لتلك الوحدات أثناء الإنشاء لدعم عمليات تنفيذ اختبار الوحدة. أعتقد أنه يمكننا إزالته من تلك التبعيات وإضافة ngRoute فقط عندما يتطلب اختبار الوحدة ذلك.

تم حل مشكلات اختبار وحدة PhantomJS 1 بعد إضافة polyfill التالية لـ karma conf. لست متأكدًا من سبب ظهور هذا الخطأ فجأة بعد ترقية الزاوية 1.5.x ...

https://www.npmjs.com/package/phantomjs-polyfill

mlakmal ، سبب عدم ظهور هذه المشكلة مع PhantomJS من قبل ، هو أن Angular لم يستخدم Function.prototype.bind . نقوم بذلك الآن ، لأنه ضروري لدعم الفئات الأصلية وجميع المتصفحات المدعومة توفرها. (لاحظ أن PhantomJS غير مدعوم بشكل صريح ، مما يعني أننا لا نختبرها ، لكن الكثير من الناس يستخدمونها (بما في ذلك مشروع ngMaterial حتى وقت مضى) بدون مشكلة afaik.)

فيما يتعلق بالاعتماد على ngRoute في InitModule :
ngRoute مزودًا واحدًا فقط ( $routeProvider ) ، وهو مفيد فقط لتسجيل المسارات. ما زلت لا أفهم لماذا تحتاج إلى إنشاء حاقن خاص بك بما في ذلك (مع الأخذ في الاعتبار أن كل حاقن سيخلق مثيلًا مختلفًا للخدمة - الخدمات فردية مع كل حاقن).
إذا كنت تقوم بتحميل InitModule فقط حتى تتمكن من الحصول على بعض الخدمات المساعدة ، فقد يكون من الأفضل استخراج هذه الخدمات المساعدة في وحدة مستقلة (والتي يعتمد عليها InitModule ) ثم فقط قم بتحميل هذه الوحدة المساعدة في حاقنك الإضافي.

gkalpak نحن نستخدم routeParams $ من ngRoute في توجيهاتنا. لهذا السبب قمنا بإضافته إلى بعض الوحدات النمطية ... لكن أعتقد أنه يمكننا إضافة وحدة ngRoute إلى ملفات المواصفات الخاصة بنا بشكل منفصل.

mlakmal ، كانت وجهة نظري أنني لا أستطيع أن أرى كيف أن ngRoute ضروري في حاقنك الإضافي الذي تقوم بإنشائه يدويًا (باستخدام angular.injector([...]) ) ، لأن ذلك سيكون حاقنًا منفصلاً (مع خدمة منفصلة مثيلات) من حاقن تطبيقك.

مرحبًا يا شباب ، آسف لإحضار هذا مرة أخرى بعد بضعة أيام ، لكنني واجهت هذا للتو.

أنا أتجسس على angular.element مع كل المكالمات ، لكنها ما زالت لا تعمل ، لسوء الحظ.

spyOn( angular, 'element' ).andCallThrough();

أي أفكار؟

mattgrande أعتقد أننا لا نستطيع فعل الكثير بدون عرض توضيحي. ؛)

هذه ليست مشكلة مع Jasmine 2.x راجع للشغل ، لأنها تنسخ جميع خصائص وظيفة التجسس على الجاسوس (انظر العرض التوضيحي ).

لا تزال مشكلة في Jasmine 1.x ، والتي لا تنسخ الخصائص (انظر العرض التوضيحي ).
يمكنك التغلب على هذا ، عن طريق نسخ الخصائص بنفسك (إما كل الخصائص الضرورية أو فقط ، مثل cleanData ):

spyOn(angular, 'element').andCallThrough();

// Copy all properties
angular.extend(angular.element, angular.element.originalValue);
// or
// Copy `cleanData` only
angular.element.cleanData = angular.element.originalValue.cleanData;

TBH ، أميل إلى إغلاقه كـ works as expected / won't fix . angular.element() أساسي جدًا وإذا كان هناك شخص ما يتجسس عليه ، فمن الأفضل أن يكونوا مستعدين لـ BCs (أو استخدم Jasmine 2: stuck_out_tongue :)

سيكون من السهل أيضًا حل هذا الأمر داخل ngMock ، على سبيل المثال ، قم بتغيير angular.element.cleanData(...) إلى شيء مثل:

var ngEl = angular.element;
(ngEl.cleanData || (ngEl.originalValue && ngEl.originalValue.cleanData) || angular.noop)(...)

ولكن غدًا قد تكون هناك مكتبة اختبار أخرى تتعطل.

لذلك ، منذ:

(أ) إنها مشكلة فقط في Jasmine 1.x (وليس 2.x) ،
(ب) يكسر الاختبارات فقط وليس رمز التطبيق و
(ج) من السهل إصلاحه ،

أنا (ما زلت) أميل إلى عدم "إصلاح" هذا.

gkalpak أنا أميل إلى الاتفاق معك. هذه حالة أخرى لـ "صفحة المشكلات المعروفة" ، أليس كذلك؟

تستخدم حل KeithPepin ،

إذا (angular.element.cleanData)
angular.element.cleanData (cleanUpNodes) ،

عملت من أجلي

شكرا على هؤلاء الرجال. سأحاول التحديث إلى Jasmine 2.x (لا توجد تغييرات كثيرة جدًا) ، ولكن إذا ثبت أن هذا مؤلم للغاية ، فسوف أستخدم حل Keith.

تحديث: تبين أنني كنت أستخدم Jasmine 2.1 بالفعل ، لكنني قمت بالتحديث إلى الأحدث ، ولم يؤثر ذلك على أي شيء.

انتهى بي الأمر باستخدام طريقة " gkalpak . شكرا!

mattgrande ، ما هو إصدار الياسمين الذي قمت بالترقية إليه؟ من الغريب أنه لم ينجح ، لأنه يبدو أنه يعمل بشكل جيد في العرض التوضيحي الخاص بي مع jasmine v2.4.1: confused:

نفس الأخطاء مع الزاوي mocks 1.5.2 و 1.5.3
(الياسمين 2.4.1)

الياسمين 2.4.0 ؛ الإصدار الزاوي 1.5.2

مرحبًا ، لدي أيضًا مشكلات غير محددة مع PhantomJS2 و karma و jasmine. أنا أستخدم أحدث إصدارات الكارما والياسمين. يستخدم تطبيقي أيضًا ngRoute.

تظهر مشكلتي عندما أحاول حقن $ rootScope و $ controller. أنا أستخدم ngMock للسخرية من إحدى الوحدات الخاصة بي. النطاق والتحكم دائمًا غير معرّفين. ومع ذلك ، عندما أختبر الوحدة فقط باستخدام angular.module ، تجتاز الاختبارات. أنا لا أستخدم spyOn.

أي اقتراحات لما يمكن أن يكون الخطأ؟

أواجه هذه المشكلة أيضًا عند الترقية من 1.4.6 إلى 1.5.3.

هل يمكن لأحدكم تقديم عرض توضيحي قابل للتشغيل للمشكلة؟

petebacondarwin هنا بناء ترافيس الفاشل: https://travis-ci.org/prestonvanloon/newrelic-angular/builds/118604417

تحرير: ها هي العلاقات العامة التي تسببت في ذلك https://github.com/prestonvanloon/newrelic-angular/pull/28

prestonvanloon ، مشكلتك هي أنك تستخدم إصدارات مختلفة من الزوايا الزاويّة والزاويّة.
يجب عليك دائمًا استخدام الإصدارات المطابقة.

gkalpak شكرا لك!

prestonvanloon : تحقق من إصدار mocks الزاوية والزاوية التي تستخدمها. كنت أواجه نفس المشكلة. عندما كنت أستخدم إصدار angular-mocks الإصدار 1.5.5 والإصدار الزاوي 1.4.7 ، حصلت على نفس الاستثناء. عندما قمت بترقية إصداري الزاوي إلى 1.5.5 ، لم أحصل على أي أخطاء وتم إجراء جميع الاختبارات بنجاح.

شكراً @ varun85jobs و gkalpak ، كانت تلك هي

مرحبًا يا رفاق ، لدي مشروع Ionic بإصدار زاوي 1.5.3 و angular-mocks 1.5.3 ، لكن ما زلت أحصل على نفس الخطأ. ماذا يمكن أن يكون؟

مرحبًا ، نفس المشكلة هنا ، لقد جربت للتو 1.5.5 و 1.5.3 وما زلت أواجه مشكلات ، كحل مؤقت نستخدم 1.5.0.

لقد أصلحت إجابة KeithPepin الأمر بالنسبة لي ، لكنني أفضل عدم تغيير رمز المكتبة

ما زلنا لا نملك حالة استخدام مناسبة للتجسس على angular.element . بدون هذا لا يمكننا المضي قدمًا في الإصلاح.

هناك سؤال حول هذا الموضوع هنا أيضًا.
جوابي من هناك في حال كان سيساعد أي شخص هنا:

واجهت نفس المشكلة وما أصلحها لي هو تحميل jquery في اختباراتي:

files: [
      'bower_components/jquery/dist/jquery.js',
      'bower_components/angular/angular.js',
      'bower_components/angular-mocks/angular-mocks.js',
...
]

أخذنا الفكرة من هذا التعليق لأننا نستخدم jQuery جنبًا إلى جنب مع Angular.

ما زلنا بحاجة إلى إعادة إنتاج جارية فعلية ، حيث تتطابق جميع إصدارات الوحدات الزاويّة المستخدمة.

حصلت على هذه المشكلة: angular.element.parent ليست وظيفة

@ kristoff2016 ، لا يبدو هذا نفس المشكلة. يرجى فتح عدد جديد ، وتقديم مزيد من المعلومات ، على سبيل المثال الرمز ذي الصلة ، ورسالة الخطأ بالضبط ، والبيئة الخاصة بك (المتصفح ، نظام التشغيل ، إلخ). تحظى النسخ الحية (باستخدام CodePen و Plnkr وما إلى ذلك) بتقدير كبير أيضًا: ابتسامة:

في حالتي ، كانت المشكلة أنني كنت أستخدم إصدارًا قديمًا من karma-phantomjs-launcher (^ 0.1.4 بدلاً من ^ 1.0.0) والذي اعتمد على إصدار أقدم من PhantomJS. مع [email protected] ، فإنه يعمل بشكل صحيح.

+1 ترقية karma-phantomjs-launcher و phantomjs إلى 2+ هي التي أدت الحيلة

كان الخيار الوحيد الذي نجح معي حتى الآن هو الرجوع إلى المستوى الزاوي / الزاوي 1.5.0

لقد مرت شهور منذ أن تم الإبلاغ عن هذا لأول مرة ولا يوجد حتى الآن أي استنساخ فعلي (بإصدارات مطابقة) تم نشره هنا !! لا يمكننا إصلاح ما لا نستطيع رؤيته. :قلق:

سأغلق هذا ، ولكن سأكون سعيدًا بإعادة الفتح إذا حصلنا على نسخة.

مرحبًا gkalpak ، شكرًا على وقتك. لقد تمكنت من إعادة إنتاج المشكلة ، لكن من الواضح أننا كنا نفعل شيئًا شقيًا حقًا في الكود الخاص بنا: see_no_ evil :. لقد حفظت في هذا PLNKR . لذلك ، قد لا تكون الشفرة التالية منطقية بالنسبة لك ، لكننا فعلنا ذلك كحل بديل لموقف محدد للغاية:

var elSelect = angular.element;
angular.element = function(id) {
        try {
            return elSelect.call(angular, id);
        } catch(err) {
            return $(id);
        }
    };

لذلك يعمل هذا مع الإصدار 1.5.0 من mocks الزاوية والزاوية عند الاختبار ، ولكن ليس مع 1.5.1-1.5.7 . لا أعرف ما إذا كانت هذه هي الحالة المحددة أو إذا كانت هناك حالات أخرى تستخدم angular.element يمكن أن تنكسر أيضًا.

ثكس فيتورارينس. كما ذكرنا سابقًا ، من "المشاغب" الكتابة فوق عنصر مؤكد مثل angular.element وليس على الأقل الاحتفاظ بخصائصه. باستخدام تقنية angular.extend() الموضحة أعلاه ، ستكون جيدًا على الرغم من ذلك.

var ngElement = angular.element;
angular.element = angular.extend(function(id) {
  try {
    return ngElement.call(angular, id);
  } catch(err) {
    return $(id);
  }
}, ngElement);

تحديث PLNKR

شكرا جزيلا لك @ gkalpak! آمل أن يكون هذا على الأقل بمثابة مرجع للأشخاص الآخرين الذين يعانون من هذه المشكلة. مرة أخرى تشك كثيرا!

مرحبًا ، أنا أيضًا أواجه نفس المشكلة. لكن باستخدام التحديد الزاوي. في وحدة التحكم الخاصة بي ، أقوم بتهيئة التحديد مثل هذا.
angular.element ("حدد"). select2 () ؛

تمت إضافة التجسس على النحو التالي:
var ngElement = angular.element ('select') ؛
angular.element = angular.extend (الوظيفة (المعرف) {
يحاول {
عودة ngElement.call (الزاوي ، المعرف) ؛
} catch (يخطئ) {
إرجاع $ (id)؛
}
}، ngElement)؛

spyOn (ngElement، 'select2'). and.callFake (function () {

    });

PhantomJS 2.1.1 (Mac OS X 0.0.0) خطأ
TypeError: محاولة تعيين خاصية للقراءة فقط.
على الرابط /node_modules/angular/angular.min.js:9

لقد مررت بهذا المنشور بالكامل واستخدمت الزاوية 1.5.7 والياسمين 2.4.1. ولكن لا تزال القضية لم تحل.

lathaMaramganti ليس كذلك:

var ngElement = angular.element('select');

لكن:

var ngElement = angular.element;

تحتاج إلى حفظ الوظيفة الأصلية لتمديدها ، وليس استدعائها.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات