我一直在使用这个教程并且谷歌搜索广告,但我似乎无法得到似乎是一个简单的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) 我有一个引擎,它在其初始化器中扩展另一个引擎类,如下所示:
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
,但它让我想知道我是否正在做一些我不应该做的事情.
我的问题有两个:为什么会发生这种情况,是否有更好的方法来实现在另一个应用程序对象上扩展/调用方法的功能?
谢谢大家!
上下文:我正在尝试使用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)
我一直在寻找ActiveAdmin
Rails 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) 我想使用 + 对基于svelte
+page.js
的路由器进行一些集成测试vitest
,但我遇到了一个问题,即jsdom
每个测试文件实例仅正确更新一次。
在以下设置中,当运行时.only
或将每个测试拆分到其自己的文件中时,任一测试都会通过。但当它们按顺序运行时,第二个总是会失败。检查 DOM 发现screen.debug()
它是空的,并且调用act
ortick
似乎没有做任何事情。
我怀疑这与如何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) 我正在试验一个Rails应用程序的设计,它将大部分功能委托给高度专业化的引擎.但是,可能会有10个Engines左右,我绝对不想管理10个不同的宝石和Git存储库.
Rails和RefineryCMS似乎都安置他们在一个混帐回购所有子模块,但后来不知怎的释放他们作为独立的宝石,以及要求他们全部用-在Rails的情况下-一个简单的require
'rails/all'
.
我当然浏览了源代码,但我可以使用更有经验的眼睛寻求帮助......任何人都可以告诉我这个多宝石,一个回购架构是如何工作的?
modularity ruby-on-rails rails-engines refinerycms ruby-on-rails-3
我正在创建一个指令来调整它所应用的元素的类。但是,当类更改时,该类的样式不适用。例如:
纤细的形状
<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 ×2
svelte ×2
angularjs ×1
bdd ×1
coffeescript ×1
jsdom ×1
modularity ×1
ng-animate ×1
refinerycms ×1
tdd ×1
testing ×1
unit-testing ×1
vitest ×1