首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >gulp-jasmine窗口未定义错误

gulp-jasmine窗口未定义错误
EN

Stack Overflow用户
提问于 2014-12-01 17:06:47
回答 2查看 10.2K关注 0票数 12

我使用gulp /gulp jasmine/ angular来运行我的单元测试。但是,我在运行Gulp目标时遇到以下错误:

代码语言:javascript
复制
C:\Projects\website2>gulp test
[01:53:10] Using gulpfile C:\Projects\website2\gulpfile.js
[01:53:10] Starting 'test'...
[01:53:11] Version: webpack 1.4.13
         Asset     Size  Chunks             Chunk Names
test.bundle.js  1051728       0  [emitted]  test
F

Failures:
1) Exception loading: C:\Projects\website2\scripts\dist\test.bundle.js Error
1.1) ReferenceError: window is not defined

1 spec, 1 failure
Finished in 0.015 seconds
[01:53:11] 'test' errored after 916 ms
[01:53:11] Error in plugin 'gulp-jasmine'
Message:
    Tests failed

我相信gulp-jasmine使用的是PhantomJS (不会触发浏览器窗口)。有人能帮我纠正我做错了什么吗?有没有遗漏的配置设置?

这是我的gulpfile.js:

代码语言:javascript
复制
var gulp = require('gulp');
var path = require('path');
var webpack = require('gulp-webpack');
var webpackConfig = require('./webpack.config');
var testWebpackConfig = require('./test.webpack.config');
var jasmine = require('gulp-jasmine');

gulp.task('default', ['build'], function() {

});

gulp.task('build', function() {
    return gulp.src(['scripts/app/**/*.js', '!scripts/app/**/*.tests.js'])
       .pipe(webpack(webpackConfig))
       .pipe(gulp.dest('scripts/dist'));
});

gulp.task('test', function() {
    return gulp.src(['scripts/app/**/*.tests.js'])
       .pipe(webpack(testWebpackConfig))
       .pipe(gulp.dest('scripts/dist'))       
       .pipe(jasmine());
});
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-03-31 18:48:45

gulp-jasmine通过Node.js运行测试,因此不适合客户端测试,请参阅https://github.com/sindresorhus/gulp-jasmine/issues/46

对于客户端测试,如果您想使用Jasmine (而不是Karma或并行),您可以编写一个SpecRunner.html文件(名称无关紧要),并在浏览器中运行它:

代码语言:javascript
复制
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>Jasmine Spec Runner</title>

    <!-- You need to specify package 'jasmine-core' in your Node.js package.json -->

    <link rel="shortcut icon" href="node_modules/jasmine-core/images/jasmine_favicon.png">
    <link rel="stylesheet" href="node_modules/jasmine-core/lib/jasmine-core/jasmine.css">

    <script src="node_modules/jasmine-core/lib/jasmine-core/jasmine.js"></script>
    <script src="node_modules/jasmine-core/lib/jasmine-core/jasmine-html.js"></script>
    <script src="node_modules/jasmine-core/lib/jasmine-core/boot.js"></script>

    <!-- Source and Spec dependencies -->
    <script src="node_modules/underscore/underscore.js"></script>
    <script src="node_modules/angular/angular.js"></script>
    <script src="node_modules/angular-mocks/angular-mocks.js"></script>

    <!-- Source files -->
    <script src="app/MySourceCode1.js"></script>
    <script src="app/MySourceCode2.js"></script>

    <!-- Spec files -->
    <script src="test/MySourceCode1.spec.js"></script>
    <script src="test/MySourceCode2.spec.js"></script>
  </head>
  <body>
  </body>
</html>

或者使用gulp-jasmine-browser

代码语言:javascript
复制
var gulp = require('gulp');
var $ = require('gulp-load-plugins')();

// You need to specify packages 'jasmine-core' and 'gulp-jasmine-browser'
// in your Node.js package.json

gulp.task('jasmine', function() {
  return gulp.src([
    'node_modules/underscore/underscore.js',
    'node_modules/angular/angular.js',
    'node_modules/angular-mocks/angular-mocks.js',

    'app/MySourceCode1.js',
    'app/MySourceCode2.js',
    'test/MySourceCode1.spec.js',
    'test/MySourceCode2.spec.js',
  ])
    .pipe($.jasmineBrowser.specRunner())
    .pipe($.jasmineBrowser.server());
});

或使用Karma :)

票数 8
EN

Stack Overflow用户

发布于 2014-12-17 15:54:13

我能够以另一种方式解决这个问题,使用无头浏览器的PhantomJS、命令行测试运行器的karma、测试框架的jasmine和任务运行器的gulp。

karma.conf.js

代码语言:javascript
复制
module.exports = function(config) {
    config.set({
        basePath: './',

        files: [
            'node_modules/angular/angular.js',
            'node_modules/angular-mocks/angular-mocks.js',
            'index-controller.js',
            'index-controller.tests.js'
        ],

        exclude: [
        ],

        autoWatch: true,

        frameworks: ['jasmine'],

        browsers: ['PhantomJS'],

        plugins: [
            'karma-jasmine',
            'karma-junit-reporter',
            'karma-chrome-launcher',
            'karma-firefox-launcher',
            'karma-phantomjs-launcher'
        ],

        junitReporter: {
            outputFile: 'unit.xml',
            suite: 'unit'
        }

    })
}

安装必要的npm模块:

代码语言:javascript
复制
npm install angular
npm install angular-mocks
npm install -g gulp
npm install gulp
npm install karma
npm install -g karma-cli
npm install karma-jasmine
npm install karma-junit-reporter
npm install karma-chrome-launcher
npm install karma-firefox-launcher
npm install karma-phantomjs-launcher
npm install phantomjs

更新您的gulpfile.js并提供两个任务:运行一次单元测试的默认任务,监视文件系统并在任何文件发生更改时运行测试的TDD任务:

gulpfile.js

代码语言:javascript
复制
var gulp = require('gulp');
var karma = require('karma').server;
gulp.task('default', function(done) {
  karma.start({      
    configFile: __dirname + '/karma.conf.js', 
        singleRun: true 
   }, done); 

});

gulp.task('tdd', function (done) { 
   karma.start({ 
     configFile: __dirname + '/karma.conf.js' 
   }, done); 
}); 

要触发,请执行以下操作:

代码语言:javascript
复制
gulp default
gulp tdd

为了完整性,下面是我的索引控制器,以及相关的测试:

index-controller.js

代码语言:javascript
复制
var app = angular.module('app', []);
app.controller('ctrl', function($scope) { 
    $scope.name = 'mickey mouse';
});

index-controller.tests.js

代码语言:javascript
复制
describe('index-controller', function() {
    beforeEach(module('app'));
    var $controller;

    beforeEach(inject(function(_$controller_){
        // The injector unwraps the underscores (_) from around the 
        // parameter names when matching
        $controller = _$controller_;
    }));

    describe('$scope.name', function() {
        it('should be mickey mouse', function() {
            var $scope = {};
            var controller = $controller('ctrl', { $scope: $scope });

            expect($scope.name).toEqual('mickey mouse');
        });

  });
});
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27224919

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档