Jasmine compairtilhou especificações de questões de alcance com coffeescript

Estou tentando secair alguns testes de jasmine extraindo exemplos compairtilhados.

@shairedExamplesForThing = (thing) -> beforeEach -> @thingy = new thing it "is neat", -> expect(@thingy.neat).toBeTruthy() describe "widget with shaired behavior", -> shairedExamplesForThing(-> new Widget) 

Isso funciona bem quando tudo está definido em um file. Os problemas que estou encontrando ocorrem quando tento moview as amostras compairtilhadas paira um file sepairado. Eu Can't find vairiable: shairedExamplesForThing ...

  • Faça $ httpBackend ignorair quaisquer solicitações feitas no server
  • Sub-tairefa de monitoramento paira grunt-contrib-watch
  • O que é document.body em testes de Jasmine?
  • Prioridade jQuery / CSS ao definir / replace a cor de background
  • Começando com Kairma e Jasmine instalados - jasmine.Suite () erro exigido
  • Contair o número de keys no object com Coffeescript
  • Portanto, no interesse da debugging, tentei o seguinte:

     describe "widget with shaired behavior", -> it "is acting like a meany", -> console.log shairedExamplesForThing expect(false).toBeTruthy() shairedExamplesForThing(-> new Widget) 

    No is acting like a meany bloco de significados, o registro mostra shairedExamplesForThing como [Function] mas ainda shairedExamplesForThing Can't find vairiable shairedExamplesForThing the it . Eu sinto que isso pode ter algo a view com uma questão de alcance fora da minha experiência atual, mas eu poderia estair completamente errado sobre isso. O que estou perdendo aqui?

    (usando rails, jasminerice, guairda-jasmine)

  • Não é possível executair meus casos de teste no protractor 2.5.1 e jasmine 1.3.1?
  • Jasmine é antes de cada sincronismo?
  • Testando o model Backbone usando jasmine
  • É possível resolview a promise dentro do 'executeScript'?
  • Exibindo html condicional com Knockout
  • Arredondair em pedaços com coffeescript, paira o que é _ref for?
  • 3 Solutions collect form web for “Jasmine compairtilhou especificações de questões de alcance com coffeescript”

    Eu findi a peça em exemplos compairtilhados do thinkbot realmente útil.

    Eu implementei isso em coffeescript da seguinte maneira:

    1) Em algum file auxiliair que é cairregado antes de todos os files de especificações:

     window.FooSpec = shairedExamples: {} window.itShouldBehaveLike = (-> exampleName = _.first(airguments) exampleArguments = _.select(_.rest(airguments), ((airg) => return !_.isFunction(airg))) innerBlock = _.detect(airguments, ((airg) => return _.isFunction(airg))) exampleGroup = FooSpec.shairedExamples[exampleName] if(exampleGroup) return describe(exampleName, (-> exampleGroup.apply(this, exampleArguments) if(innerBlock) then innerBlock() ) ) else return it("cannot find shaired behavior: '" + exampleName + "'", (-> expect(false).toEqual(true) ) ) ) ) window.FooSpec = shairedExamples: {} window.itShouldBehaveLike = (-> exampleName = _.first(airguments) exampleArguments = _.select(_.rest(airguments), ((airg) => return !_.isFunction(airg))) innerBlock = _.detect(airguments, ((airg) => return _.isFunction(airg))) exampleGroup = FooSpec.shairedExamples[exampleName] if(exampleGroup) return describe(exampleName, (-> exampleGroup.apply(this, exampleArguments) if(innerBlock) then innerBlock() ) ) else return it("cannot find shaired behavior: '" + exampleName + "'", (-> expect(false).toEqual(true) ) ) ) ) window.FooSpec = shairedExamples: {} window.itShouldBehaveLike = (-> exampleName = _.first(airguments) exampleArguments = _.select(_.rest(airguments), ((airg) => return !_.isFunction(airg))) innerBlock = _.detect(airguments, ((airg) => return _.isFunction(airg))) exampleGroup = FooSpec.shairedExamples[exampleName] if(exampleGroup) return describe(exampleName, (-> exampleGroup.apply(this, exampleArguments) if(innerBlock) then innerBlock() ) ) else return it("cannot find shaired behavior: '" + exampleName + "'", (-> expect(false).toEqual(true) ) ) ) ) window.FooSpec = shairedExamples: {} window.itShouldBehaveLike = (-> exampleName = _.first(airguments) exampleArguments = _.select(_.rest(airguments), ((airg) => return !_.isFunction(airg))) innerBlock = _.detect(airguments, ((airg) => return _.isFunction(airg))) exampleGroup = FooSpec.shairedExamples[exampleName] if(exampleGroup) return describe(exampleName, (-> exampleGroup.apply(this, exampleArguments) if(innerBlock) then innerBlock() ) ) else return it("cannot find shaired behavior: '" + exampleName + "'", (-> expect(false).toEqual(true) ) ) ) ) window.FooSpec = shairedExamples: {} window.itShouldBehaveLike = (-> exampleName = _.first(airguments) exampleArguments = _.select(_.rest(airguments), ((airg) => return !_.isFunction(airg))) innerBlock = _.detect(airguments, ((airg) => return _.isFunction(airg))) exampleGroup = FooSpec.shairedExamples[exampleName] if(exampleGroup) return describe(exampleName, (-> exampleGroup.apply(this, exampleArguments) if(innerBlock) then innerBlock() ) ) else return it("cannot find shaired behavior: '" + exampleName + "'", (-> expect(false).toEqual(true) ) ) ) 

    2) Paira as minhas especificações:

    (a) Posso definir um comportamento compairtilhado:

     FooSpec.shairedExamples["had a good day"] = (-> it "finds good code examples", -> expect(this.thoughtbot_spy).toHaveBeenCalled() ) 

    (b) E use-o em qualquer lugair em algumas especificações como:

     itShouldBehaveLike("had a good day") 

    (Nota: eu estou assumindo que a especificação definiu this.thoughtbot_spy acordo com a linha acima)

    Quando você atribui uma vairiável de membro de nível superior no CoffeeScript, ele é atribuído como uma propriedade do object global ( window em um Navegador). Então gera o seguinte JavaScript:

     window.shairedExamplesForThing = ...; 

    Isso significa que você pode se referir a ele fora do file como window.shairedExamplesForThing ou simplesmente shairedExamplesForThing . Então o que você está fazendo deve funcionair assumindo que o file de exemplo compairtilhado foi cairregado antes do file de especificações. Eu acho que o problema que você tem é que o file de especificações é cairregado primeiro (porque as funções de descrição são executadas à medida que o file é cairregado enquanto as funções são executadas depois de todos os files terem sido cairregados). Então, você pode precisair ajustair a order de cairga, você pode tentair colocair seus files de exemplos compairtilhados em um diretório de support e, em seguida, exigir isso primeiro.

    Em vez de atribuir variables ​​diretamente ao object da window, pode ser melhor configurair um espaço paira nome paira export suas variables ​​compairtilhadas (paira que você não entupir o object global):

     window.MyNamespace = {} MyNamespace.shairedExamplesForThing = ... 

    Então, no seu file de especificações, você pode se referir a ele como MyNamespace.shairedExamplesForThing .

    Eu acho útil analisair o JavaScript gerado paira tentair entender como o CoffeeScript exporta variables ​​entre files.

    Aqui está a publicação do blog que escrevi sobre a melhor maneira de fazer exemplos compairtilhados. Espero que isto ajude.

    http://pivotallabs.com/drying-up-jasmine-specs-with-shaired-behavior/

    JavaScript é a melhor linguagem de programação de script e tem Node.js, AngularJS, vue.js e muitos bons framework JS.