2015-06-12 15 views
30

Sự cố: Ngay sau khi tôi nhập Angular 2 vào tệp không có kiểm tra nào của tôi thực thi.Viết bài kiểm tra Đơn vị cơ bản nhất trong Angular 2?

Câu hỏi: Làm cách nào tôi có thể thiết lập cấu hình karma để hỗ trợ hai góc để kiểm tra của tôi được truyền chính xác?

HOẶC Câu hỏi: Làm thế nào tôi có thể thiết lập bất kỳ khuôn khổ thử nghiệm với angular2 viết bằng es6?

Git Repo (make sure you're on branch angular-2

Karma:

// Karma configuration 
// Generated on Mon Jun 01 2015 14:16:41 GMT-0700 (PDT) 

module.exports = function(config) { 
    config.set({ 

    // base path that will be used to resolve all patterns (eg. files, exclude) 
    basePath: '', 


    // frameworks to use 
    // available frameworks: https://npmjs.org/browse/keyword/karma-adapter 
    frameworks: ['jspm', 'jasmine'], 


    // list of files/patterns to load in the browser 
    jspm: { 
     loadFiles: [ 
      'client/app/**/*.js' 
     ] 
    }, 


    // list of files to exclude 

    plugins:[ 
      'karma-jasmine', 
      'karma-coverage', 
      'karma-jspm', 
      'karma-chrome-launcher' 
     ], 


    // list of files to exclude 
    exclude: [ 
    ], 


    // preprocess matching files before serving them to the browser 
    // available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor 
    preprocessors: { 
    }, 


    // test results reporter to use 
    // possible values: 'dots', 'progress' 
    // available reporters: https://npmjs.org/browse/keyword/karma-reporter 
    reporters: ['progress'], 


    // web server port 
    port: 9876, 


    // enable/disable colors in the output (reporters and logs) 
    colors: true, 


    // level of logging 
    // possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG 
    logLevel: config.LOG_INFO, 


    // enable/disable watching file and executing tests whenever any file changes 
    autoWatch: true, 


    // start these browsers 
    // available browser launchers: https://npmjs.org/browse/keyword/karma-launcher 
    browsers: ['Chrome'], 


    // Continuous Integration mode 
    // if true, Karma captures browsers, runs the tests and exits 
    singleRun: true 
    }); 
}; 

JS:

"use strict"; 
import {ComponentAnnotation as Component, ViewAnnotation as View} from 'angular2/angular2'; 
import List from './list/list'; 

//@Component({selector: 'my-app'}) 
//@View({template: `<h1>{{title}}</h1>`}) 
class Todo{ 
    constructor(){ 
     this.title = 'Gym'; 
     this.list = [new List()]; 

    } 

    setTitle(newTitle){ 
     this.title = newTitle; 
    } 
    addListItem(){ 
     this.list.push(new List()); 
    } 
    removeListItem(){ 
     this.list.pop(); 
    } 

} 
export default Todo; 

Todo.spec.js:

import Todo from './todo'; 
describe('Todo list:', function(){ 
    var todo; 
    beforeEach(function(){ 
     todo = new Todo(); 
    }); 

    it('expect Todo to be present', function(){ 
     expect(todo).not.toBe(null); 
    }); 

    it('expect Todo constructor to accept a title', function(){ 
     expect(todo.title).toEqual('Gym'); 
    }); 

    it('expect Todo List property to be Present', function(){ 
     expect(todo.list).not.toBe(null); 
    }) 

    it('expect Todo List property to accept a title:empty', function(){ 

     expect(todo.list[0].title).toEqual('empty'); 
    }); 

    it('expect Todo Title property to accept a title change', function(){ 
     todo.setTitle('Work'); 
     expect(todo.title).toEqual('Work'); 
    }); 

    it('expect Todo List property to have an add function', function(){ 
     todo.addListItem(); 
     expect(todo.list.length).toEqual(2); 
    }); 

    it('expect Todo to have a remove function', function(){ 
     todo.removeListItem(); 
     expect(todo.list.length).toEqual(0); 
    }) 

}); 

lỗi dự kiến:

$ karma start 
INFO [karma]: Karma v0.12.36 server started at http://localhost:9876/ 
INFO [launcher]: Starting browser Chrome 
WARN [web-server]: 404: /favicon.ico 
INFO [Chrome 43.0.2357 (Mac OS X 10.10.3)]: Connected on socket 31YT5XsHM29BDG8sYXSq with id 13157663 
Chrome 43.0.2357 (Mac OS X 10.10.3): Executed 0 of 0 ERROR (0.002 secs/0 secs) 

Nếu tôi loại bỏ nhập góc cho Todo.js

$ karma start 
INFO [karma]: Karma v0.12.36 server started at http://localhost:9876/ 
INFO [launcher]: Starting browser Chrome 
WARN [web-server]: 404: /favicon.ico 
INFO [Chrome 43.0.2357 (Mac OS X 10.10.3)]: Connected on socket 7QKCB-7aTRwNsOGfYjmG with id 71239348 
Chrome 43.0.2357 (Mac OS X 10.10.3): Executed 7 of 7 SUCCESS (0.008 secs/0.005 secs) 

CẬP NHẬT TỪ GITTER:

@mat thewharwood thử tải tệp ng2 đi kèm vào phần jspm Loadfiles của bạn. với plugin karma-jspm, bạn có thể chỉ định đường dẫn tùy chỉnh, vì vậy bạn có thể ghi đè đường dẫn góc/góc để trỏ đến tệp được gói duy nhất đó. nó làm cho các bài kiểm tra của chúng tôi chạy dễ dàng hơn rất nhiều. tôi cũng phải bao gồm bộ tiền xử lý karma babel và chạy mã của tôi thông qua điều đó.

Đáng tiếc là tôi không thể có được loadfiles hoạt động bình thường: c

Trả lời

9

Sau khi mở trang debug bạn có thể thấy góc đó đã nói với bạn rằng nó đã mất tích gói reflect-metadata. Vì vậy, tôi đã thêm một tuyên bố nhập khẩu thủ công, cho nó trong app/todo/todo.js mà giải quyết vấn đề này:

import Reflect from 'reflect-metadata' 
import {ComponentAnnotation as Component, ViewAnnotation as View} from 'angular2/angular2'; 
import List from './list/list'; 

đầu ra của tôi bây giờ là:

node_modules/.bin/karma start --single-run 
INFO [karma]: Karma v0.12.36 server started at http://localhost:9876/ 
INFO [launcher]: Starting browser Chrome 
WARN [web-server]: 404: /favicon.ico 
INFO [Chrome 43.0.2357 (Mac OS X 10.10.3)]: Connected on socket cGnqva8p5bf-j7L2EVzI with id 94803307 
Chrome 43.0.2357 (Mac OS X 10.10.3): Executed 7 of 7 SUCCESS (0.005 secs/0.004 secs) 
Các vấn đề liên quan