কৌণিক রিটার্ন মডিউলে পরীক্ষার পরিষেবা সংজ্ঞায়িত করা হয় না


127

আমি আমার প্রকল্পে ডিফল্ট পরিষেবা ইউনিট পরীক্ষা চালানোর চেষ্টা করছি (গিটহাবের অ্যাংুলার বীজ প্রকল্প থেকে নেওয়া), তবে আমি ত্রুটিটি পেয়েছি "মডিউলটি সংজ্ঞায়িত নয়"।

আমি পড়েছি যে রেফারেন্সযুক্ত জাভাস্ক্রিপ্ট ফাইলগুলির ক্রমানুসারে এটি করার মতো কিছু হতে পারে তবে আমি এটি কাজ করে দেখছি না বলে আশা করি আপনারা কেউ সাহায্য করতে সক্ষম হবেন।

পরীক্ষার জন্য আমার কনফিগারেশনটি দেখতে এমন দেখাচ্ছে:

বেসপথ = '../';

ফাইলগুলি = [
'সর্বজনীন / জাভাস্ক্রিপ্ট / লিবিব / জ্যাকোয়ারি -১.৮.২.জেএস',
'পাবলিক / জাভাস্ক্রিপ্ট / লিবিব / অ্যাঙ্গুলার.জেএস',
'পাবলিক / জাভাস্ক্রিপ্ট / লিবিব / কৌণিক- .js',
'পাবলিক / অ্যাপ.জেএস ',
পাবলিক / কন্ট্রোলার /
.js',
পাবলিক / directives.js ',
পাবলিক / filters.js',
পাবলিক / services.js ',
জুঁই,
JASMINE_ADAPTER,
পাবলিক / JavaScripts / lib / অনুপস্থিত কৌণিক-ঠাট্টা করে। জেএস ',
' পরীক্ষা / ইউনিট / *। জেএস '];

অটোওয়াচ = সত্য;

ব্রাউজারগুলি = ['ক্রোম'];

জুনিটরপোর্টার = {আউটপুটফিল: 'টেস্ট_আউট / ইউনিট.এক্সএমএল', স্যুট: 'ইউনিট'};

পরিষেবাটি নিম্নলিখিতগুলির মতো দেখাচ্ছে:

angular.module('myApp.services', []).
  value('version', '0.1');

পরীক্ষাটি এরকম দেখাচ্ছে:

'use strict';

describe('service', function() {
  beforeEach(module('myApp.services'));


  describe('version', function() {
    it('should return current version', inject(function(version) {
      expect(version).toEqual('0.1');
    }));
  });
});

টেস্টাকুলার মাধ্যমে পরীক্ষা চালানোর সময় ত্রুটিটি হ'ল:

রেফারেন্সএরর: মডিউলটি সংজ্ঞায়িত হয়নি


2
আপনি কোথাও আপনার প্রকল্প ভাগ করতে পারেন? আমি সাহায্য করতে সক্ষম হতে পারে। আপনার কনফিগারেশনের উপর ভিত্তি করে কোন ফাইলগুলি আসলে লোড করা হয়েছে তা দেখার জন্য আপনি টেস্টাকুলারটির জন্য DEBUG স্তরটি চালু করার চেষ্টা করেছিলেন? আপাতত সন্দেহজনক অংশটি হ'ল এই প্যাটার: পাবলিক / জাভাস্ক্রিপ্ট / লিবিব / কৌণিক-জেএস - এটি কী মিলবে?
pkozlowski.opensource

@ জনডো ধন্যবাদ যে কাজ করেছে। আপনি যদি উত্তর যুক্ত করেন তবে আমি এটি সমাধান হিসাবে চিহ্নিত করব। কারণটি হ'ল আমি বীজ প্রকল্প অনুসরণ করছিলাম, যা এটি সেভাবে করেছিল এবং যা কাজ করেছে। আমি জানি না এটি ছিল কিনা কারণ এটি পূর্ববর্তী সংস্করণ ছিল।
ডফস

@ ডফস কি "'পাবলিক / জাভাস্ক্রিপ্ট / লিবিব / কৌণিক-জেএস'," এবং "" পাবলিক / কন্ট্রোলার / .js "" টাইপস?
রায়ান ও'নিল

@ রায়ানও'নিল দুঃখিত, হ্যাঁ এটি টাইপো ছিল।
ডফস

উত্তর:


260

আপনি কৌণিক- mocks.js ফাইলটি অনুপস্থিত ।


8
নোট করুন angular.moduleএবং angular.mock.moduleএক নয়window.moduleফাংশনের জন্য একটি ওরফে হয় angular.mock.module। আরও জন্য এই উত্তর দেখুন।
টিম স্কাউব

পূর্ববর্তী মন্তব্যে যেমন বলা হয়েছে, কৌণিক.মডিউলটি কৌণিক.মক.মডিউলের জন্য কোনও উপ নাম নয়।
ফিলিপো দে লুকা

7
যদি এই ফাইলটি কীভাবে সরবরাহ করা যায় সে সম্পর্কে কোনও পরামর্শ দিলে এই উত্তরটি আরও বেশি কার্যকর হবে। আমার বওয়ার ইনস্টল করা দরকার, তারপরে এনজিএমকস।
ইশারউড

4
উত্তরটি সমাধানের একমাত্র অংশ সরবরাহ করে। এটি আসলে একটি মন্তব্য নয় ব্যাখ্যা নয়। নীচে কিছু উত্তর অনেক বিস্তারিত।
জেরোম বোচম্যান

1
নতুনদের জন্য, আপনাকে ফাইলে একটি রেফারেন্স যুক্ত করতে হবে angular-mocksএবং karma.conf.jsকার্মের মাধ্যমে পরীক্ষা চালাতে হবে, জেসমিন নয়। এইভাবে, যখন কর্ম চালিত হয়, এটি angular-mocksএক্সটেনশানগুলি বাছাই করে এবং সেগুলি পরিবেশে অন্তর্ভুক্ত করে।
লুক 13

41

আমারও একই সমস্যা ছিল এবং আমি বুঝতে পেরেছিলাম কেন এটি কাজ করছে না: কৌনিক-মকস.জেএস ফাইলের আগে জেসমিন.জেএস জাভাস্ক্রিপ্টটি অবশ্যই উল্লেখ করা উচিত । প্রকৃতপক্ষে, কৌণিক- mocks.js জেসমিন লোড হয়েছে কিনা তা পরীক্ষা করে এবং এটি হলে এটি উইন্ডোতে মডিউল ফাংশন যুক্ত করবে।

এখানে কৌণিক মোকস কোডের একটি নির্যাস দেওয়া হয়েছে :

(আমার নীচে 'হ্যাকিং' সম্পর্কে কয়েকটি মন্তব্যের পরে সম্পাদনা করুন: এটি কোডের কেবল একটি নির্যাস, এটি নিজেকে লেখার দরকার নেই, এটি ইতিমধ্যে রয়েছে!)

window.jasmine && (function(window) {

[...]

  window.module = angular.mock.module = function() {
    var moduleFns = Array.prototype.slice.call(arguments, 0);
    return isSpecRunning() ? workFn() : workFn;
    /////////////////////
    [...]
  };

সংক্ষেপে: আপনার কৌনিক-মকস.জেএস এবং আপনি যাবার আগে আপনার জুঁই.জেএসকে কেবল উল্লেখ করুন ।


কৌনিক-উপহাসের আগে জুঁই জাভাস্ক্রিপ্ট ফাইলগুলি লোড হয়েছে কিনা তা নিশ্চিত করে এটিও সমাধান করা যেতে পারে। কাজ করতে স্টাফ পেতে হ্যাকি পরিবর্তন করার চেয়ে পরিষ্কার সমাধান।
foomip

@ ফুমেপ হ্যাকি পরিবর্তন করার পরামর্শ কে দিয়েছে?
স্টিফেন

জিনিসগুলি সঠিক ফ্যাশনে লোড হয় তা নিশ্চিত করার জন্য আপনি আপনার অ্যাপ্লিকেশনটিতে একটি হ্যাক প্রবেশ করিয়েছেন - এবং আমার অর্থ হ্যাক একটি খারাপ উপায়ে নয় (কোডটির স্নিপেট আপনি যেভাবে লিখেছেন তাতে কোনও ভুল নেই) তবে যখন ঘটে তখন কী ঘটে জুঁইতে আপডেট করুন বা অন্য কোনও কিছুর কারণে আপনার স্নিপেটটি ভেঙে যায় বা প্রত্যাশার মতো আর কাজ করে না? এটি হতে পারে বা ঘটতে পারে না, তবে এটি এখন আপনার কোডের একটি দায়বদ্ধতা যা এড়ানো যেতে পারে, আপনি কি ভাবেন না?
ফোমাইপ

@ ফুমিপ: আপনি কী উল্লেখ করছেন তা আমি নিশ্চিত নই, তবে এটি যদি আমার কোডটি উপরের দিকে থাকে তবে এটি আমার দ্বারা লেখা হয়নি, আমি বিষয়টি উল্লেখ করার জন্য কেবল এটি উদ্ধৃত করছি। কোডটি কৌণিক-উপহাসের অংশ। ফিক্সটি কেবল একটি ফাইল অন্যটির আগে উল্লেখ করার বিষয়।
এন্টোইন জাউসসাইন

36

window.moduleফাংশন আসে কৌণিক-mocks.js এবং জন্য একটি সাঁটে লেখার হয় angular.mock.module। হিসাবে উল্লেখ ডক্স , moduleফাংশন শুধুমাত্র জুঁই সাথে কাজ করে।

টেস্টাকুলার ব্যবহার করে , নিম্নলিখিত উদাহরণের কনফিগারেশন ফাইলটি লোড হবে angular-mocks.js

/** example testacular.conf.js */

basePath = '../';
files = [
  JASMINE,
  JASMINE_ADAPTER,
  'path/to/angular.js',
  'path/to/angular-mocks.js',   // for angular.mock.module and inject.
  'src/js/**/*.js',             // application sources
  'test/unit/**/*.spec.js'      // specs
];
autoWatch = true;
browsers = ['Chrome'];

এবং অন্য কোথাও যেমন পরামর্শ দেওয়া হয়েছে, কোন স্ক্রিপ্টগুলি লোড হয়েছে তা দেখতে আপনি ডিবাগ লগিং দিয়ে টেস্টাকুলার চালাতে পারেন (আপনিও এটি পরিদর্শকের মধ্যে দেখতে পাবেন):

testacular --log-level debug start config/testacular.conf.js

angular.mock.injectডক্স একটি প্রশংসনীয় সম্পূর্ণ উদাহরণস্বরূপ অন্তর্ভুক্ত।


সম্ভবত লক্ষণীয় যে moduleএখন মোচা নিয়েও কাজ করে
রবিন-হুডি

11

আমরা আমাদের ইউনিট পরীক্ষায় 'কৌনিক' ছাড়াই 'মডিউল' ব্যবহার করি এবং এটি দুর্দান্ত কাজ করে।

CoffeeScript:

describe 'DiscussionServicesSpec', ->
    beforeEach module 'DiscussionServices'
    beforeEach inject ... etc.

যা সংকলন

javascript:

describe('DiscussionServices', function() {
    beforeEach(module('DiscussionServices'));
    beforeEach(inject(function ... etc.

আপনি বর্ণিত ত্রুটির মতো আমি কেবল একবার যখনই দেখি তা হ'ল যদি টেস্টাকুলার.কোনফ.জেএস ফাইলটিতে কৌণিক-মকস.জেএস ফাইলটি 'মডিউল' ব্যবহারের চেষ্টা করার আগে ফাইল বিভাগে তালিকাভুক্ত না হয়। আমি যদি পরীক্ষার পরে এটি 'ফাইলগুলি' তালিকায় রাখি তবে

ReferenceError: Can't find variable: module

(আমাদের পরীক্ষাগুলি ফ্যান্টমজেএসের মাধ্যমে পরিচালিত হচ্ছে)


2
উপসংহারে আসা জিনিসটি কৌণিক-উপহাসের একটি প্রয়োজনীয়তা।
এড্রিয়েন

3

আমি আমার কর্মফলে কৌণিক-মকস.জেগুলি অন্তর্ভুক্ত করেছি, তবে ত্রুটিটি পাচ্ছিলাম। এটি ফাইলের অ্যারেতে ক্রমটি গুরুত্বপূর্ণ turns (ডু) ঠিক এইচটিএমএল ডকের মাথায় যেমন কোনও স্ক্রিপ্ট সংজ্ঞায়িত হওয়ার আগে কৌনিক বলে, এবং ত্রুটি দেখা দেয়। সুতরাং আমাকে কেবল আমার অ্যাপ.জেএসগুলি কৌণিক.জেএস এবং কৌণিক-মকস.জেএস এর পরে অন্তর্ভুক্ত করতে হয়েছিল।


0

আপনি যদি ইওমান এবং এর কৌণিক-জেনারেটর ব্যবহার করছেন তবে আপনি সম্ভবত এই ত্রুটিটি পেয়ে যান। বিশেষত আপনি যখন টিউটোরিয়ালটি করেন (._।)
আমি এটি কৌণিক-মকস.জেএস ফাইলটি কপির মাধ্যমে, বাউয়ার_কম্পোন্টস / কৌণিক-মকস ডির থেকে পরীক্ষার / উপহাসের কাছে সংশোধন করেছি। অবশ্যই আপনার অবশ্যই নিশ্চিত হতে হবে যে আপনার karma.conf.js ফাইলটি সঠিকভাবে কনফিগার করা হয়েছে।
গ্রিটিংস!


0

আমি যখন এই জাতীয় কিছু করছিলাম তখন আমার এই একই সমস্যা ছিল var module = angular.module('my',[])। আমার এটি নিশ্চিত করা দরকার যে এটি আইআইএফই দ্বারা বেষ্টিত ছিল

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.