javascript未验证,jslint显示不正确的错误

时间:2015-01-27 15:59:42

标签: javascript angularjs jslint

我的代码在下面,有人可以进入jslint并粘贴我的代码,并告诉我为什么我的错误正在发生和修复。 例如,它描述了'描述'在定义之前使用,但在angularjs网站上的页面中,它们不显示任何定义。 另一个错误是"意外的角色''。"。在第2行的字符42.由于没有遗漏空间,所以也是假的。

describe('forgotPasswordCtrl', function () {
    beforeEach(module('forgotPasswordApp'));    
    var $controller;
    var returnMsg = 'Forgot password response message';
    beforeEach(inject(function(_$controller_){
        $controller = _$controller_;
    }));

    describe('$scope.finish', function(){
        it('returns a -forgot password response- message', function(){
            var $scope = {};
            var controller = $controller('forgotPasswordCtrl', { $scope: $scope });
            $scope.finish();
            expect($scope.globalError).toEqual(returnMsg);

            });
        });



    describe('$scope.cancel', function(){
        it('assigns a url depending on a customer match happens', function(){
            var $scope = {};
            var controller = $controller('forgotPasswordCtrl', { $scope: $scope });
            $scope.cancel();
            expect(window.location.assign).toEqual("/web/tfgm_customer");

            });
        });

2 个答案:

答案 0 :(得分:1)

哇。好的,所以你并不总是能够正确地使用lint库。如果这个代码应该在上下文中工作,那么就会有很多意大利面。

这是我对你所给予的最好的猜测。让我知道我的错误。

注意:您需要在文件顶部添加一些/*jslint ... */指令。

  1. sloppy:true:允许您不使用'use strict'
  2. white:true:允许不分青红皂白的空白
  3. nomen:true:在变量名称的开头和结尾处允许下划线(_)。
  4. browser:true:此处允许使用window
  5. 还要注意/*global ... */指令,在这里你可以放置所有这些函数,由于某些奇怪的原因,这些函数不会存在于名称空间中。

    我们走了:

    /*jslint sloppy:true, white:true, nomen:true, browser:true */
    /*global describe, module, beforeEach, inject, it, expect */
    
    // You have some bad scoping below. I *think* you expect
    // $controller, controller, & returnMsg to exist in full 
    // script scope.
    var returnMsg, $controller = null, controller = null;
    
    describe('forgotPasswordCtrl', function () {
        beforeEach(module('forgotPasswordApp'));
    
        returnMsg = 'Forgot password response message';
        beforeEach(inject(function(_$controller_){
            // You're never doing anything with this.
            // JSLint wants to know why not.
            $controller = _$controller_;
        }));
    });
    
    
    describe('$scope.finish', function(){
        it('returns a -forgot password response- message', function(){
            var $scope = {};
            controller = $controller('forgotPasswordCtrl', { $scope: $scope });
            $scope.finish();
            expect($scope.globalError).toEqual(returnMsg);
        });
    });
    
    describe('$scope.cancel', function(){
        it('assigns a url depending on a customer match happens', function(){
            var $scope = {};
            controller = $controller('forgotPasswordCtrl', { $scope: $scope });
            $scope.cancel();
            expect(window.location.assign).toEqual("/web/tfgm_customer");
        });
    });
    
    $controller.usedSomehow();      // to make JSLint happy. Please use.
    controller.usedSomehowAsWell(); // to make JSLint happy. Please use.
    

    老实说,这里有很多古怪的事情,我不知道该怎么做。我想你需要给我们一个更好的描述你认为你在做什么(显然(?)单元测试的东西),但像... ...

    var $scope = {};
    controller = $controller('forgotPasswordCtrl', { $scope: $scope });
    

    没有多大意义。 $ scope是一个对象,您传递给传递给$ controller的anon对象中也称为$ scope的属性?为什么?为什么不......

    controller = $controller('forgotPasswordCtrl', { $scope: {} });
    

    ......?我的猜测是你在这段代码的不同scopes周围发生了很多事情,你需要先确定它们才能真正开始你的代码。

    那就是按原样工作吗?


    评论后编辑:

    如果你得到这样的东西......

    Unexpected character '(space)'.
    
        beforeEach(module('forgotPasswordApp'));    
    

    ...那是因为你在JSLint指令中没有white:true。请查看JSLint instructions page以获取有关所有这些选项的更多信息,其中包含white

      

    true如果应该忽略严格的空格规则。

    您看到的错误有点误导。如果您的行末尾有任何尾随空格,则可能会抛出该错误。

答案 1 :(得分:0)

我看了一下JSHint所说的内容。 JSHint不如JSLint严格,更易于阅读,但功能较少。

你错过了一个括号和一个括号。它对很多事情都说“未定义”,因为你没有定义很多东西,从“describe”函数开始。您正在使用尚未声明的全局函数和变量。如果由另一个脚本/库添加,jslint或jshint不会为你猜测它。如果您希望停止投诉,只需在顶部添加一行var describe, module, beforeEach, inject, it, expect;