2016-07-31 28 views
0

Ich habe zwei Karma-Tests (für Vuejs), die korrekt funktionieren, wenn sie eigenständig ausgeführt werden, aber wenn ich sie als Teil einer Suite ausführe, wird einer von ihnen fehlschlagen.Karma & Jasmine & browserify Zustand leaking?

Ich bin ziemlich neu in JS Tests, also ich vermute, es gibt ein Problem mit importierten Teilen irgendwie ?! obwohl das ein bisschen seltsam scheint.

Wie auch immer, hier sind die zwei Tests, wenn jemand erklären kann, warum sie nicht funktionieren, wenn sie zusammen laufen, würde ich es gerne hören.

import Vue from 'vue' 
import CastList from '../../../frontend/components/Cast-List.vue' 

describe('CastList2.vue',() => { 
    var vm; 
    var component; 

    beforeEach(() => { 
    CastList.data = function() { 
     return { 
     initialFetchComplete: true, 
     refreshable: true 
     } 
    }; 
    vm = new Vue({ 
     template: '<div><test v-ref:component></test></div>', 
     components: { test: CastList } 
    }).$mount(); 

    component = vm.$refs.component; 
    }) 

    it('should have a refresh button', (done) => { 
    expect(vm.$el.querySelector('button[name=refresh]')).toBeTruthy(); 
    component.refreshable = false; 
    component.$nextTick(() => { 
     expect(vm.$el.querySelector('button[name=refresh]')).toBeFalsy(); 
     done(); 
    }); 
    }); 
}); 

und ...

import Vue from 'vue' 
import CastList from '../../../frontend/components/Cast-List.vue' 

describe('CastList.vue',() => { 
    var vm; 
    var component; 

    beforeEach(() => { 
    CastList.data = function() { 
     return { 
     initialFetchComplete: true, 
     refreshable: false 
     } 
    }; 
    vm = new Vue({ 
     template: '<div><test v-ref:component></test></div>', 
     components: { test: CastList } 
    }).$mount(); 

    component = vm.$refs.component; 
    }) 

    it('should have a refresh button', (done) => { 
    expect(vm.$el.querySelector('button[name=refresh]')).toBeFalsy(); 
    component.refreshable = true; 
    component.$nextTick(() => { 
     expect(vm.$el.querySelector('button[name=refresh]')).toBeTruthy(); 
     done(); 
    }); 
    }); 
}); 

meine karma.conf wie folgt aussieht:

// https://github.com/Nikku/karma-browserify 
module.exports = function (config) { 
    config.set({ 
    browsers: ['PhantomJS'], 
    frameworks: ['browserify', 'jasmine'], 
    files: ['spec/frontend/**/*.js'], 
    reporters: ['spec'], 
    preprocessors: { 
     'spec/frontend/**/*.js': ['browserify'] 
    }, 
    browserify: { 
     debug: true, 
     // needed to enable mocks 
     plugin: [require('proxyquireify').plugin] 
    }, 
    // if you want to continuously re-run tests on file-save, 
    // replace the following line with `autoWatch: true` 
    singleRun: true 
    }) 
} 

ich die beiden Testdateien "Cast-Liste" genannt habe und "Blah" und wenn man sich die Fehlermeldung ansieht, scheint es, dass die beiden Dateien in Konflikt stehen.

1) should not have a refresh button 
    CastList2.vue 
    Expected null to be truthy. 
/var/folders/tz/9v8nv4t92mq5np77n3tqgr_00000gn/T/057de4a9f4398d04398e527f6243d941.browserify:14898:68 <- spec/frontend/unit/Cast-List.spec.js:28:4 
/var/folders/tz/9v8nv4t92mq5np77n3tqgr_00000gn/T/057de4a9f4398d04398e527f6243d941.browserify:14856:11 <- spec/frontend/unit/Blah.spec.js:28:6 
/var/folders/tz/9v8nv4t92mq5np77n3tqgr_00000gn/T/057de4a9f4398d04398e527f6243d941.browserify:5218:14 <- node_modules/vue/dist/vue.common.js:470:0 
[email protected]/var/folders/tz/9v8nv4t92mq5np77n3tqgr_00000gn/T/057de4a9f4398d04398e527f6243d941.browserify:5193:16 <- node_modules/vue/dist/vue.common.js:445:0 

Ich denke, das Problem ist, dass ich etwas Böse über Reiten der importierten CastList es6 Modul importieren und modules are live not copies zu sein.

Antwort

0

Ändern Sie Ihre Beschreibung, um einen anderen Namen zu haben. Wenn Sie denselben Namen in zwei verschiedene Dateien schreiben, kombiniert er diese beiden, und Sie enden mit einem Konflikt in beforeEach (weil ein describe nur eins vor jedem haben kann) und somit einer der Tests fehlschlägt.

+0

Ich habe einen der beschreibenden Blöcke umbenannt und es schlägt immer noch fehl. Das ist aber sicherlich der Punkt, an dem das Problem liegt, oder zumindest denke ich, wenn ich einen Teil der Fehlermeldung ansehe, werde ich die Frage mit dem Fehler aktualisieren. –