karma-fixture, 用于加载. html 和. json 设备的Karma 测试 runner 插件

分享于 

9分钟阅读

GitHub

  繁體 雙語
A plugin for the Karma test runner that loads .html and .json fixtures
  • 源代码名称:karma-fixture
  • 源代码网址:http://www.github.com/billtrik/karma-fixture
  • karma-fixture源代码文档
  • karma-fixture源代码下载
  • Git URL:
    git://www.github.com/billtrik/karma-fixture.git
    Git Clone代码到本地:
    git clone http://www.github.com/billtrik/karma-fixture
    Subversion代码到本地:
    $ svn co --depth empty http://www.github.com/billtrik/karma-fixture
    Checked out revision 1.
    $ cd repo
    $ svn up trunk
    
    karma夹具 Build StatusNPM version

    用于加载 .html.json 设备的Karma 测试 runner 插件。

    它提供了与茶匙夹具包相同的API。

    安装

    从npm安装插件:

    $ npm install karma-fixture --save-dev

    fixture 添加到 Karma 配置中的frameworks array 中:

    module.exports=function(config){
     config.set({
     //.. . frameworks: ['mocha', 'fixture'],
     //.. .

    你还必须在你的Karma 配置文件中 register/所有设备的inside。 如果所有装备都存在于 fixtures/base/path/ 文件夹下,那么应该在这个基本路径下包含所有感兴趣的文件。

    module.exports=function(config){
     config.set({
     //.. . files: [
     {
     pattern:'fixtures/base/path/**/*',
     },
     //.. . ],
     //.. .],

    最后,你必须添加 html2jskarma-json-fixtures-preprocessor Karma preprocessors:

    $ npm install karma-html2js-preprocessor --save-dev
    $ npm install karma-json-fixtures-preprocessor --save-dev

    配置 Karma 以通过这些preprocessors加载所有的html和JSON设备文件:

    module.exports=function(config){
     config.set({
     //.. . preprocessors: {
     '**/*.html': ['html2js'],
     '**/*.json': ['json_fixtures']
     },
     //.. .

    然后设置 karma-json-fixtures-preprocessor 插件:

    module.exports=function(config){
     config.set({
     //.. . jsonFixturesPreprocessor: {
     variableName:'__json__' },
     //.. .

    安装问题

    Uncaught SyntaxError: Unexpected token : 加载JSON文件时出错

    这可能是由于'karma-json-fixtures-preprocessor'配置值不正确造成的。 有关更多信息,请参见:https://github.com/billtrik/karma-fixture/issues/15#issuecomment-274051710

    Warning: No provider for"framework:fixture"! 你的配置中可能有一个 plugins 条目。 如果是这样,你必须明确声明你计划在该 array 中使用的每个插件:

    module.exports=function(config){
     config.set({
     //.. . plugins: [
     'karma-fixture',
     'karma-html2js-preprocessor',
     'karma-json-fixtures-preprocessor',
     //.. . ],
     //.. .

    实现细节

    所有的html设备文件都被加载为字符串,并将 inside 创建的window.__html__ 对象和所有json设备加载到 inside window.__json__

    固件插件在每个测试运行的window.fixture 对象中公开。 它从这些对象加载fixture文件并添加创建的html inside ( 在启动时创建的window.fixture.el 元素)。 它将加载的JSONs inside 附加到 fixture.json array。

    用法

    假设你有以下的治具文件:

    • fixtures/base/path/test1.html

      <p>p</p>
      <ahref='#'>
       <span>link</span>
      </a>
    • fixtures/base/path/json/test1.json

      "{"test":true}"

    你可以使用 fixture inside 来处理这些设备:

    describe('some test that needs a fixture', function(){
     // If base path is different from the default `spec/fixtures`before(function(){
     fixture.setBase('fixtures/base/path')
     });
     beforeEach(function(){
     this.result=fixture.load('test1.html', 'test1.json');
     });
     afterEach(function(){
     fixture.cleanup()
     });
     it('plays with the html fixture', function(){
     expect(fixture.el.firstChild).to.equal(this.result[0][0]);
     });
     //.. .});

    API

    • fixture.el

      对容器元素的引用。 加载的每个html设备都会附加 inside 这个容器。

    • fixture.json

      从fixture模板导入的所有json对象的array。

    • fixture.load(files..., append = false)

      它接受多个文件名作为参数。 所有文件名均从基本路径中加载。

      它加载并附加在夹具容器元素中。 它返回一个 array,引用了新创建的第一级html元素。 加载超过一个时,它将返回已经加载的每个设备的描述格式的一个 array。

      它采用一个默认的布尔参数,默认为 false。 如果 false,它清空 window.fixture.el 容器元素并清除 window.fixture.json array。 如果 true,它只是将请求的夹具附加到容器。

      如果fixture存在于默认的spec/fixtures 以外的基路径中,则应调用 fixture.setBase('fixtures/base/path') 在你的规范中,或者加载它们的完整,基包括,文件名前缀为'/'。

      例如: fixture.load('/my/other/base/path/fixture1.html')

      场景:

      html夹具

      它返回由 fixture file: 创建的所有第一级节点的array

      html_fixture =fixture.load('test1.html');// thenexpect(html_fixture[0].innerHTML).to.equal('<p>p</p>')// andexpect(html_fixture[1].innerHTML).to.equal('<a href="#"><span>link</span></a>')

      JSON

      它通过 JSON.parsing 返回一个有效的对象,即传递的json fixture文件。 加载的所有JSON文件也会附加到 window.fixture.json 数组中:

      json_fixture =fixture.load('json/test1.json')// thenexpect(json_fixture).to.eql({"test":true})// andexpect(fixture.json[0]).to.eql({"test":true})

      多文件

      结果将是一个包含每个加载模板的结果的array:

      loaded_fixtures =fixture.load('test1.html', 'json/test1.json')// thenexpect(loaded_fixtures[0][0].innerHTML).to.equal('<p>p</p>')// andexpect(loaded_fixtures[0][1].innerHTML).to.equal('<a href="#"><span>link</span></a>')// andexpect(loaded_fixtures[1]).to.eql({"test":true})// andexpect(fixture.json[0]).to.eql({"test":true})
    • fixture.set(html_strings, append=false)

      它接受多个html_strings作为参数并加载它们。 它返回加载的结果,或者返回一个上已经加载结果的array

      它采用带有默认值 false的布尔参数。 如果 false,它清空 window.fixture.el 容器元素并清除 window.fixture.json array。

      result =fixture.set('<h1>test</h1>')// thenexpect(result[0].innerHTML).to.equal('<h1>test</h1>')
    • fixture.cleanup()

      它清空 window.fixture.el 容器元素并清除 window.fixture.json array。

    • fixture.setBase(fixtureBasePath)

      它设置了所有即将加载的装备的基本路径。 这可以通过加载具有它的满的具有它的完整性。基本包含的文件名和'/'的。

    许可证

    麻省理工学院许可证( MIT )


    plugin  test  FIX  Runner  karma  Test Runner  
    相关文章