2012-06-10 27 views
18

Khi tôi cố gắng chạy thông số kỹ thuật hoa nhài của tôi, tôi nhận đượcLỗi Loại:. Jasmine.getEnv() currentSpec là null

TypeError: jasmine.getEnv().currentSpec is null in 
    http://localhost:8888/__JASMINE_ROOT__/jasmine.js (line 498) 

Không biết tại sao, thậm chí không chắc chắn bắt đầu từ đâu tìm.

Đường dây 498 là:

return jasmine.getEnv().currentSpec.expect(actual); 

Tôi đã làm hoa nhài trong vài tháng nay, nhưng không phải trên dự án này. Tôi chưa bao giờ thấy điều này xảy ra trước đây.

Vì vậy, tôi bắt đầu từ đâu?

(Đây là viên ngọc hoa nhài trong một dự án đường ray 3.x)

+7

Tôi đã có cùng một vấn đề, khi tôi nhầm lẫn đã viết 'mô tả' thay vì' nó' trong các bài kiểm tra của tôi. –

+0

Tôi không nghĩ đó là nó, khi tôi chạy nó trên hộp địa phương của tôi và nó dường như làm việc tốt. Tôi đã chạy nó trên một phiên ssh tunnelled. Có lẽ điều đó liên quan đến nó, nhưng nó không nên có. Nhưng nó đã làm. – Satya

+0

@ rinat.io Cảm ơn! Đó là vấn đề đối với tôi! –

Trả lời

0

Tôi nghĩ vấn đề là trong các phiên bản khác nhau của góc trong góc-mocks.jsgóc-scenario.js Nếu bạn cấu hình như sau:

files = [ 
    JASMINE, 
    JASMINE_ADAPTER, 
    '../app/lib/angular/angular.js', 
// ANGULAR_SCENARIO, 
// ANGULAR_SCENARIO_ADAPTER, 
    '../app/lib/angular/angular-scenario.js', 
    '../app/lib/angular/jstd-scenario-adapter.js', 
    '../app/lib/angular/jstd-scenario-adapter-config.js', 
    '../app/lib/angular/angular-mocks.js', 
    '../app/lib/angular/angular-resource.js', 
    '../app/lib/angular/angular-cookies.js', 
    '../app/js/**/*.js', 
    '**/*Spec.js' 
]; 

cố gắng để tránh ANGULAR_SCENARIOANGULAR_SCENARIO_ADAPTER - thay thế nó với những người thân rằng được nhúng vào nguồn góc của bạn ('../app/lib/angular/angular-scenario.js', '../app/lib/angular/jstd-scenario-adapter.js', '../app/lib /angular/jstd-scenario-adapter-config.js 'trong trường hợp của tôi).

+0

Tôi không nghĩ mình đang sử dụng góc cạnh. – Satya

+0

Tôi sử dụng nghiệp, hoa nhài để kiểm tra ứng dụng góc cạnh. Tiếp theo lời khuyên của bạn nhưng vẫn có cùng một vấn đề: jasmine.getEnv(). CurrentSpec là null. – asa

0

Kiểm tra đầy đủ của bạn trông như thế nào? Tôi cũng nhận được lỗi này. Bài kiểm tra của tôi trông giống như sau:

'use strict'; 

describe("CalendarController", function() { 
    var scope, $location, $controller, createController; 
    var baseTime = new Date(2014, 9, 14); 
    spyOn(Date.prototype, 'getMonth').andReturn(baseTime.getMonth()); 
    spyOn(Date.prototype, 'getDate').andReturn(baseTime.getDate()); 
    spyOn(Date.prototype, 'getFullYear').andReturn(baseTime.getFullYear()); 
    var expectedMonth = fixture.load("months.json")[0]; 

    beforeEach(module('calendar')); 

    beforeEach(inject(function ($injector) { 
    scope = $injector.get('$rootScope').$new(); 
    $controller = $injector.get('$controller'); 

    createController = function() { 
     return $controller('CalendarController', { 
     '$scope': scope 
     }); 
    }; 
    })); 

    it('should load the current month with days', function(){ 
    var controller = createController(); 
    expect(scope.month).toBe(expectedMonth); 
    }); 
}); 

Lưu ý rằng chức năng SpyOn nằm trong khối mô tả. Khi nhìn vào mã nhài chúng tôi thấy rằng SpyOn phải ở trong một beforeEach hoặc it khối:

jasmine.Env.prototype.it = function(description, func) { 
    var spec = new jasmine.Spec(this, this.currentSuite, description); 
    this.currentSuite.add(spec); 
    this.currentSpec = spec; 

    if (func) { 
    spec.runs(func); 
    } 

    return spec; 
}; 

...

jasmine.Env.prototype.beforeEach = function(beforeEachFunction) { 
    if (this.currentSuite) { 
    this.currentSuite.beforeEach(beforeEachFunction); 
    } else { 
    this.currentRunner_.beforeEach(beforeEachFunction); 
    } 
}; 

Đây là những nơi mà các currentSpec được thiết lập. Nếu không, điều này sẽ là null. Vì vậy, trong ví dụ của tôi nó nên là:

'use strict'; 

describe("CalendarController", function() { 
    var scope, $location, $controller, createController; 
    var baseTime = new Date(2014, 9, 14); 
    var expectedMonth = fixture.load("months.json")[0]; 

    beforeEach(module('calendar')); 

    beforeEach(inject(function ($injector) { 
    scope = $injector.get('$rootScope').$new(); 
    $controller = $injector.get('$controller'); 

    createController = function() { 
     return $controller('CalendarController', { 
     '$scope': scope 
     }); 
    }; 
    })); 

    it('should load the current month with days', function(){ 
    spyOn(Date.prototype, 'getMonth').andReturn(baseTime.getMonth()); 
    spyOn(Date.prototype, 'getDate').andReturn(baseTime.getDate()); 
    spyOn(Date.prototype, 'getFullYear').andReturn(baseTime.getFullYear()); 

    var controller = createController(); 
    expect(scope.month).toBe(expectedMonth); 
    }); 
}); 

Và sau đó điều này sẽ làm việc vì spyOn là trong đó khối. Hy vọng điều này sẽ hữu ích.

+0

Không có bất kỳ gián điệp nào. – Satya

+0

Để giúp mọi người trả lời đầy đủ câu hỏi này nên đăng thông số ví dụ đầy đủ. Có thể có các chức năng khác đang cố gắng thiết lập 'this.currentSpec' đang thất bại. Tôi đã nhận được cùng một lỗi và đây là giải pháp, hy vọng nó sẽ giúp người khác. – earlonrails

0

Tôi đã gặp sự cố này và đã tìm thấy bài viết sau. Có vẻ như phiên bản hoa nhài và phiên bản Angular không hoạt động cùng nhau.Khi tôi thực hiện các thay đổi mà bài viết phác thảo đến angular-mocks.js, lỗi đã biến mất.

http://railsware.com/blog/2014/09/09/make-angularjs-1-0-7-work-with-jasmine-2-0/

Tôi chạy vào trong khi điều này lấy Pluralsight khóa học: Xây dựng một trang web với Bootstrap, AngularJS, ASP.NET, EF và Azure. Trong mô-đun thử nghiệm Đơn vị.

1

Tôi đã gặp lỗi tương tự. Tôi có một tuyên bố expect trực tiếp bên trong describe. Tôi đã di chuyển số expect bên trong khối it một lỗi đã biến mất.

Cảm ơn rinat-io cho ý tưởng.

Các vấn đề liên quan