小编jos*_*arh的帖子

ngAnimate 1.4.7单元测试不调用动画功能

我一直在使用这个教程并且谷歌搜索广告,但我似乎无法得到似乎是一个简单的ngAnimate单元测试运行.

ngAnimate在应用程序中运作良好.所有Angular核心库都是1.4.7版.

angular.module 'MyAnimation', [ 'ngAnimate' ]
  .animation '.added-class', ->
    addClass: (element, className, done) ->
      console.log 'add class triggered'
      element.css 'opacity', '0.5'
      done()
Run Code Online (Sandbox Code Playgroud)

测试

describe 'MyAnimation', ->
  beforeEach -> module 'ngAnimate'
  beforeEach -> module 'ngAnimateMock'
  beforeEach -> module 'MyAnimation'

  it 'animates', -> inject ($animate, $rootScope, $rootElement) ->
    $animate.enabled(true)
    divElement = angular.element '<div>my div</div>'

    # Kick off initial digest loop in which no animations are run.
    $rootScope.$digest()

    # Trigger animation.
    $animate.addClass divElement, 'added-class'
    $rootScope.$digest() …
Run Code Online (Sandbox Code Playgroud)

unit-testing coffeescript angularjs ng-animate

13
推荐指数
1
解决办法
778
查看次数

当cache_classes = false时,为什么包含在Rails Engine初始化器中会出现故障?

我有一个引擎,它在其初始化器中扩展另一个引擎类,如下所示:

module MyApp
    class Engine < ::Rails::Engine
        initializer 'extend Product' do
            AnotherApp::Product.send :include, MyApp::ProductExtender
        end
    end
end
Run Code Online (Sandbox Code Playgroud)

ProductExtender模块在包含它时调用AnotherApp :: Product上的一些方法,例如

module ProductExtender
    def self.included( model )
        model.send :include, MethodsToCall
    end

    module MethodsToCall
        def self.included( m )
            m.has_many :variations
        end
    end
end
Run Code Online (Sandbox Code Playgroud)

这适用于测试和生产环境,但是当我尝试调用ProductExtender定义的东西时config.cache_classes = false,它会抛出一个对象NoMethodError,比如@ product.variations.

毋庸置疑,看到我的所有测试都通过,然后在开发过程中遇到错误,这是令人不寒而栗的.当我设置时它不会发生cache_classes = true,但它让我想知道我是否正在做一些我不应该做的事情.

我的问题有两个:为什么会发生这种情况,是否有更好的方法来实现在另一个应用程序对象上扩展/调用方法的功能?

谢谢大家!

ruby-on-rails rails-engines

6
推荐指数
1
解决办法
1364
查看次数

在练习行为驱动开发(BDD)时,我应该测试第三方代码集成的时间和数量?

上下文:我正在尝试使用Capybara/Steak进行集成测试,在Ruby on Rails环境中练习BDD,因此这将是我使用的示例,但这个问题是关于BDD最佳实践的一般问题.

假设我有一个(诚然是广泛的)用户故事,如下所示:

Feature:

As an administrator

I should be able to manage my products
Run Code Online (Sandbox Code Playgroud)

我一直在寻找ActiveAdminRails 3 的gem,它允许您使用简单的DSL创建复杂的管理界面.虽然节省时间的潜力巨大,但它也让我很难将这么多功能卸载到第三方代码而不进行测试.

但是,我被告知你通常只需要测试自己编写的代码.因此,按照这种逻辑,我只需要测试它ActiveAdmin是否正确集成,因为这是我实际编写的唯一代码.测试这个的基本方案可能是:

Scenario:

Given I have 20 products

When I visit the product index page

Then I should see 20 products.
Run Code Online (Sandbox Code Playgroud)

这是ActiveAdmin开箱即用的功能.所以我可以进行基本安装并使用ActiveAdmin文档创建Products Admin页面,方案将通过.

当然,我还集成了大量其他方案,例如:

Given I have 20 products

And my products include Apples, Bananas, and Berries

When I sort my products by name

Then Apples, Bananas and Berries should be on the …
Run Code Online (Sandbox Code Playgroud)

testing tdd bdd integration-testing

6
推荐指数
1
解决办法
402
查看次数

使用 vitest 来测试基于历史记录的路由器时,如何重置 jsdom 实例?

我想使用 + 对基于svelte+page.js的路由器进行一些集成测试vitest,但我遇到了一个问题,即jsdom每个测试文件实例仅正确更新一次。

在以下设置中,当运行时.only或将每个测试拆分到其自己的文件中时,任一测试都会通过。但当它们按顺序运行时,第二个总是会失败。检查 DOM 发现screen.debug()它是空的,并且调用actortick似乎没有做任何事情。

我怀疑这与如何jsdom与 History API 交互有关,但我不知道从这里到哪里去。

根细

<script>
  import page from 'page'

  import SignIn from './SignIn/SignIn.svelte'
  import Upload from './Upload/Upload.svelte'
  import { authenticationToken } from './Root.stores.js'

  let currentPage

  page('/', () => {
    page.redirect('/sign-in')
  })

  page('/sign-in', () => {
    currentPage = SignIn
  })

  page('/upload', () => {
    if ($authenticationToken === null) {
      return page.redirect('/sign-in')
    }

    currentPage = Upload
  }) …
Run Code Online (Sandbox Code Playgroud)

javascript jsdom svelte testing-library vitest

5
推荐指数
1
解决办法
742
查看次数

Rails 3和RefineryCMS如何从同一个Git仓库管理和发布多个宝石?

我正在试验一个Rails应用程序的设计,它将大部分功能委托给高度专业化的引擎.但是,可能会有10个Engines左右,我绝对不想管理10个不同的宝石和Git存储库.

Rails和RefineryCMS似乎都安置他们在一个混帐回购所有子模块,但后来不知怎的释放他们作为独立的宝石,以及要求他们全部用-在Rails的情况下-一个简单的require 'rails/all'.

我当然浏览了源代码,但我可以使用更有经验的眼睛寻求帮助......任何人都可以告诉我这个多宝石,一个回购架构是如何工作的?

modularity ruby-on-rails rails-engines refinerycms ruby-on-rails-3

0
推荐指数
1
解决办法
409
查看次数

如何设置其类根据 Svelte 中的“use”指令而更改的组件的样式?

我正在创建一个指令来调整它所应用的元素的类。但是,当类更改时,该类的样式不适用。例如:

纤细的形状

<form id='sign-in' use:delayed={ handleSubmit }>
  <label for='sign-in-name'>Your Name</label>
  <input required id='sign-in-name' type='text' />

  <input type='submit' value='Sign In' />
</form>

<style>
  form {
    display: block;
  }

  form.submitting {
    display: none;
  }
</style>
Run Code Online (Sandbox Code Playgroud)

延迟.js

export default function(node, action) {
  node.addEventListener('submit', async function(event) {
    event.preventDefault()
    const originalClass = node.className

    node.className = `${ originalClass } submitting`
    await action()
    node.className = originalClass
  })
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,类将在 DOM 中成功更改,但表单仍将显示。该form.submitting样式甚至没有进入 Svelte 生成的 CSS 中。

我知道我可以使用全局样式表来解决这个问题,但我很好奇为什么作用域样式不适用,以及是否有办法让它以这种方式工作。

这可行,但感觉很hacky。

<style>
  form {
    display: block;
  }

  :global(form.submitting) { …
Run Code Online (Sandbox Code Playgroud)

javascript svelte

0
推荐指数
1
解决办法
1924
查看次数