Tôi đang cố gắng thực hiện một số kiểm thử Đơn vị cơ bản cho AngularJS sử dụng Karma. Tất cả các bài kiểm tra tôi đã viết có vẻ như chính xác về cú pháp. Nhưng tôi đang gặp vấn đề ở bước cơ bản nhất, tức là phần beforeEach của mã. Khi tôi thử chạy thử nghiệm, tôi nhận được sự cố sau đây
TypeError: Cannot read property '$injector' of null
at Object.workFn (http://localhost:9876/absolute/Users/vesriram/Documents/AngularJS%20project/vendor/js/angular-mocks.js:1698:15)
at Object.<anonymous> (http://localhost:9876/adapter/lib/angular-scenario.js:26360:54)
at Array.forEach (native)
at Object.forEach (http://localhost:9876/adapter/lib/angular-scenario.js:9593:11)
Tôi đã cố gắng giải quyết vấn đề này trong 36 giờ qua và không có may mắn cho đến nay. Theo như tôi có thể thấy, không ai khác dường như có vấn đề này. Điều này làm cho tôi nghĩ rằng tôi có thể làm điều gì đó ngu ngốc. Tôi thực sự đánh giá cao bất kỳ sự giúp đỡ nào mà mọi người có thể cho tôi. Tôi sẽ vui lòng đăng bất kỳ mã bổ sung nào mà bạn cần (miễn là tôi tự do tiết lộ nó).
Mã liên quan là following-
app.js
var sell_page = angular.module("sell_page", ['ui.bootstrap']);
sell_page.controller('ItemTitleController', ['$scope','listingInformationService', '$location',function($scope, listingInformationService, $location) {
$scope.itemNames = getAllItemNames();
$scope.draftItems = getAllSavedDrafts();
document.getElementById("categorySelection").style.visibility = "hidden";
------bunch of code-------
}]);
controllersSpec.js
describe("Unit: Testing Controllers", function() {
beforeEach(angular.mock.module('sell_page'));
it('should have a ItemTitleController controller', function() {
expect(sell_page.ItemTitleController).not.to.equal(null);
});
describe("ItemTitleController", function() {
var scope;
beforeEach(angular.mock.module('sell_page'));
beforeEach(angular.mock.inject(function($rootScope, listingInformationService, $location, $controller) {
var scope = $rootScope.$new();
var controller = $controller('ItemTitleController', {
$scope : scope
});
}));
it("should display xxx properly", function() {
--some code---
});
});
karma.conf.js
basePath = '';
files = [
JASMINE,
JASMINE_ADAPTER,
'../vendor/js/angular.min.js',
'../vendor/js/angular.js',
'../vendor/js/angular-mocks.js',
'../vendor/js/angular-scenario.js',
ANGULAR_SCENARIO,
ANGULAR_SCENARIO_ADAPTER,
'../app/js/*.js',
'e2e/*.js',
'midway/*.js',
'unit/*.js',
];
exclude = [
];
reporters = ['progress'];
port = 9876;
runnerPort = 9100;
colors = true;
logLevel = LOG_INFO;
autoWatch = true;
browsers = ['Chrome'];
captureTimeout = 60000;
singleRun = false;
ANGULAR_SCENARIO và ANGULAR_SCENARIO_ADAPTER dành cho thử nghiệm E2E vì vậy không cần bao gồm. Tôi không nghĩ đó là vấn đề của bạn. –
Vâng, tôi cũng có các bài kiểm tra e2e. Tôi đã không bao gồm họ coz họ đang làm việc tốt và không liên quan đến vấn đề hiện tại của tôi. :) – user2438247
Bạn đã bao giờ giải quyết vấn đề của mình chưa? – Chad