2016-10-17 98 views
2

我正在使用因果報應對於角度2單元測試。它工作正常,但我有一件事,我不知道爲什麼它發生。 果報,當我運行測試用例,每次我測試運行兩次,當我對這個函數,我在測試case.I用過不知道爲什麼會這樣打印的console.log。我知道這個問題的功能請幫我。Karma運行測試用例加倍

我使用它的WebPack。

webpack: bundle is now VALID. 
17 10 2016 10:02:20.102:INFO [karma]: Karma v1.2.0 server started at http://localhost:9876/ 
17 10 2016 10:02:20.106:INFO [launcher]: Launching browser Chrome with unlimited concurrency 
17 10 2016 10:02:20.188:INFO [launcher]: Starting browser Chrome 
17 10 2016 10:02:40.019:INFO [Chrome 52.0.2743 (Linux 0.0.0)]: Connected on socket /#bNq05S_5S6il-eenAAAA with id 72225563 
LOG: 'headers = {"content-type":["application/json"]}' 
LOG: 'headers = {"content-type":["application/json"]}' 
    Global Service : Login Authentication 
    ✔ Should have operator login Authentication 
LOG: 'headers = {"content-type":["application/json"],"authorization":["Token ad42hjk234bad8808"]}' 
LOG: 'headers = {"content-type":["application/json"],"authorization":["Token ad42hjk234bad8808"]}' 
LOG: 'catch 400 = {"_body":"{\"username\":\"[email protected]\",\"password\":\"761e768a501c30ea8e38\"}","status":400,"ok":false,"statusText":null,"headers":null,"type":null,"url":null}' 
LOG: 'catch 400 = {"_body":"{\"username\":\"[email protected]\",\"password\":\"761e768a501c30ea8e38\"}","status":400,"ok":false,"statusText":null,"headers":null,"type":null,"url":null}' 
    ✔ Should be call error page if login credential wrong 
    Global Utils : Meta urls API 
    ✔ Should have get Meta urls 
LOG: 'page error' 
LOG: 'page error' 
    ✔ If get Empty Response of MetaUrls with status code 200 
LOG: 'page error' 
LOG: 'page error' 
    ✔ If get Empty Response of MetaUrls with status code 400 
LOG: 'page error' 
LOG: 'page error' 
    ✔ Should not have get Meta urls data with status code 404 

Finished in 0.473 secs/0.431 secs 

SUMMARY: 
✔ 6 tests completed 

karma.conf.js

/** 
* @author: @AngularClass 
*/ 

module.exports = function (config) { 
    var testWebpackConfig = require('./config/webpack.test.js')({env: 'test'}); 

    var configuration = { 

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

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

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

    /* 
    * list of files/patterns to load in the browser 
    * 
    * we are building the test environment in ./spec-bundle.js 
    */ 
    files: [ 
     { pattern: './config/spec-bundle.js', watched: false } 
    ], 

    /* 
    * preprocess matching files before serving them to the browser 
    * available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor 
    */ 
    preprocessors: { 
     './config/spec-bundle.js': ['coverage', 'webpack', 'sourcemap'], 
    }, 

    // Webpack Config at ./webpack.test.js 
    webpack: testWebpackConfig, 

    coverageReporter: { 
     type: 'in-memory' 
    }, 

    remapCoverageReporter: { 
     'text-summary': null, 
     json: './coverage/coverage.json', 
     html: './coverage/html' 
    }, 


    // Webpack please don't spam the console when running in karma! 
    webpackMiddleware: {stats: 'errors-only'}, 

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

    // 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: false, 

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

    customLaunchers: { 
     ChromeTravisCi: { 
     base: 'Chrome', 
     flags: ['--no-sandbox'] 
     } 
    }, 

    plugin: [ 
     'karma-coverage', 
     'karma-mocha-reporter', 
     'karma-remap-coverage', 
     'karma-sourcemap-loader', 
     'istanbul-instrumenter-loader' 
    ], 

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

    if (process.env.TRAVIS) { 
    configuration.browsers = [ 
     'ChromeTravisCi', 
     'Chrome' 
    ]; 
    } 

    config.set(configuration); 
}; 

SPEC-bundle.js

/** 
* @author: @AngularClass 
*/ 

/* 
* When testing with webpack and ES6, we have to do some extra 
* things to get testing to work right. Because we are gonna write tests 
* in ES6 too, we have to compile those as well. That's handled in 
* karma.conf.js with the karma-webpack plugin. This is the entry 
* file for webpack test. Just like webpack will create a bundle.js 
* file for our client, when we run test, it will compile and bundle them 
* all here! Crazy huh. So we need to do some setup 
*/ 
Error.stackTraceLimit = Infinity; 

require('core-js/es6'); 
require('core-js/es7/reflect'); 

// Typescript emit helpers polyfill 
require('ts-helpers'); 

require('zone.js/dist/zone'); 
require('zone.js/dist/long-stack-trace-zone'); 
require('zone.js/dist/proxy'); // since zone.js 0.6.15 
require('zone.js/dist/sync-test'); 
require('zone.js/dist/jasmine-patch'); // put here since zone.js 0.6.14 
require('zone.js/dist/async-test'); 
require('zone.js/dist/fake-async-test'); 

// RxJS 
require('rxjs/Rx'); 

var testing = require('@angular/core/testing'); 
var browser = require('@angular/platform-browser-dynamic/testing'); 

testing.TestBed.initTestEnvironment(
    browser.BrowserDynamicTestingModule, 
    browser.platformBrowserDynamicTesting() 
); 

/* 
* Ok, this is kinda crazy. We can use the context method on 
* require that webpack created in order to tell webpack 
* what files we actually want to require or import. 
* Below, context will be a function/object with file names as keys. 
* Using that regex we are saying look in ../src then find 
* any file that ends with spec.ts and get its path. By passing in true 
* we say do this recursively 
*/ 
var testContext = require.context('../src', true, /\.spec\.ts/); 

/* 
* get all the files, for each file, call the context function 
* that will require the file and load it up here. Context will 
* loop and require those spec files here 
*/ 
function requireAll(requireContext) { 
    return requireContext.keys().map(requireContext); 
} 

// requires and returns all modules that match 
var modules = requireAll(testContext); 

回答

相關問題