2017-01-18 12 views
1

Я пытаюсь использовать проверку Parsley для приложения angular2, которое я пишу, и хочу написать несколько тестов жасмина. Я хочу убедиться, что вход проверен правильно.Как написать тест единицы жасмина для моих угловых форм 2, использующих проверку парселя?

Я пытаюсь написать небольшой тест, но я думаю, что проблема заключается в том, что я не могу загружать петрушку. Я запускаю кармического бегуна и пытаюсь включить его в файлы конфигурации для этого.

Это мой тестовый файл:

///<reference path="./../../../../typings/globals/jasmine/index.d.ts"/> 
 

 
import { Component, DebugElement, AfterViewInit } from "@angular/core"; 
 
import { By } from "@angular/platform-browser"; 
 
import { ComponentFixture, TestBed, async } from "@angular/core/testing"; 
 
import { FormsModule } from '@angular/forms'; 
 
import { ComponentFixtureAutoDetect } from '@angular/core/testing'; 
 
import { dispatchEvent } from '@angular/platform-browser/testing/browser-util'; 
 

 
declare var jQuery: any; 
 

 
describe("StringLengthValidationApp",() => { 
 
    beforeEach(() => { 
 
     TestBed.configureTestingModule({ 
 
      imports: [ FormsModule ], 
 
      declarations: [StringLengthValidationApp], 
 
      providers: [ 
 
       { provide: ComponentFixtureAutoDetect, useValue: true } 
 
      ] 
 
     }); 
 
    }); 
 

 
    beforeEach(async(() => { 
 
     TestBed.compileComponents(); 
 
    })); 
 

 
    it("should work",() => { 
 
     let fixture = TestBed.createComponent(StringLengthValidationApp); 
 

 
     fixture.detectChanges(); 
 
     return fixture.whenStable().then(() => { 
 

 
      const inputName = 'quick BROWN fox'; 
 
      let nameInput = fixture.debugElement.query(By.css('input')).nativeElement; 
 
      nameInput.value = inputName; 
 
      nameInput.dispatchEvent(new Event('input')); 
 
      fixture.detectChanges(); 
 

 
      let second = fixture.debugElement.query(By.css('textarea')).nativeElement; 
 
      second.value = inputName; 
 
      second.dispatchEvent(new Event('input')); 
 

 
      fixture.detectChanges(); 
 
      console.log(fixture.nativeElement); 
 
      let errors = fixture.debugElement.queryAll(By.css("ul")); 
 

 
      expect(errors.length).toBe(1); 
 
     }); 
 
    }); 
 
}); 
 

 
@Component({ 
 
    selector: "date-validation-app", 
 
    template: ` 
 
     <form id="form" 
 
       class="form-horizontal form-label-left parsleyjs" 
 
       data-parsley-validate="" 
 
       data-parsley-priority-enabled="false" 
 
       novalidate="novalidate"> 
 

 
      <input type="text" id="basic" name="basic" class="form-control" 
 
        required="required" 
 
        data-parsley-trigger="change" 
 
        data-parsley-maxlength="3" /> 
 

 
      <textarea name="textarea" rows="10" cols="50">Write something here</textarea> 
 
     </form> 
 
    ` 
 
}) 
 
class StringLengthValidationApp { 
 

 
}

Мои karma.conf.js

var webpackConfig = require('./webpack.test'); 
 

 
module.exports = function (config) { 
 
    var _config = { 
 
     basePath: '', 
 

 
     frameworks: ['jasmine'], 
 

 
     files: [ 
 
      { pattern: './config/karma-test-shim.js', watched: false } 
 
     ], 
 

 
     preprocessors: { 
 
      './config/karma-test-shim.js': ['webpack', 'sourcemap'] 
 
     }, 
 

 
     webpack: webpackConfig, 
 

 
     webpackMiddleware: { 
 
      stats: 'errors-only' 
 
     }, 
 

 
     webpackServer: { 
 
      noInfo: true 
 
     }, 
 

 
     reporters: ['kjhtml'], 
 
     port: 9876, 
 
     colors: true, 
 
     logLevel: config.LOG_INFO, 
 
     autoWatch: false, 
 
     browsers: ['Chrome'], 
 
     singleRun: false 
 
    }; 
 

 
    config.set(_config); 
 
};

И карма-тест-shim.js

Error.stackTraceLimit = Infinity; 
 

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

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

 
require('jquery/src/jquery'); 
 
require('parsleyjs/dist/parsley.js'); 
 

 
var appContext = require.context('../src', true, /\.spec\.ts/); 
 

 
appContext.keys().forEach(appContext); 
 

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

 

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

Я получаю сообщение об ошибке, как этот

Uncaught Error: Error in :0:0 caused by: form.parsley is not a function 
 
TypeError: form.parsley is not a function

Когда не работает с функцией ngAfterViewInit пытается связать петрушку, он будет работать, но я получить тест с ошибкой

Error: Expected 0 to be 1.

И при взгляде на него в Chrome не ошибка проверки не видно либо.

Мое подозрение, что петрушка не запускается, но я новичок в этом, так что я думаю, я могу быть сделаны какие-либо простую ошибку или что это может быть что-нибудь еще, что это неправильно

Любые намеки на то, что сделать, чтобы решить ее будет очень ценится

+0

Я думаю, что я решили проблему, просто добавив 'node_modules/parsleyjs/dist/parsley.js', в раздел файлов в моем файле karma.conf.js – lidholm

ответ

0

Я думаю, что я решил эту проблему, просто добавив «node_modules/parsleyjs/расст/parsley.js», в разделе файлы в моих karma.conf.js

 Смежные вопросы

  • Нет связанных вопросов^_^