我正在使用jasmine 2.0。
我试图理解done()
函数。
使用以下基本茉莉花代码:
describe('Jasmine 2.0 done()', function() {
beforeEach(function () {
console.log('install');
jasmine.clock().install();
});
afterEach(function () {
console.log('uninstall');
jasmine.clock().uninstall();
});
it('should wait 1ms then complete', function (done) {
setTimeout(function(){
console.log('async');
expect(true).toBe(true);
done();
}, 1)
});
});
我认为我看到的发生:
beForeeach
运行,安装时钟,记录安装do()
。我希望如此
每次运行之前,安装时钟并记录“安装”
- 测试运行,等待一毫秒,运行日志、expect和
done()
每次运行后,卸载时钟并记录“卸载”
- 测试无误通过
我这么想是因为留档说
在调用其完成之前,此规范不会完成。
所以我假设每次
之后
都会等到调用done()
来执行。
我也尝试过在每个代码之后添加
do()
afterEach(function (done) {
console.log('uninstall');
jasmine.clock().uninstall();
done();
});
这没什么区别。
为什么这次试验没有成功?
关于
do()
函数,我有什么不明白的地方?
柱塞显示问题
使用Jasmine异步测试,我们必须调用beforeach()
和afterEach()
函数中的异步代码,该函数在descripe()
函数块中的每个it()
函数块之前运行。
这意味着必须在上面提到的方法中调用do()
回调,否则测试将变得同步,如果超过超时间隔,它将阻止调用线程。
beforeEach(function (done) {
console.log('install');
jasmine.clock().install();
done();
});
afterEach(function (done) {
console.log('uninstall');
jasmine.clock().uninstall();
done();
});
这是一个正在工作的JSFIDLE。
安装jasmine的模拟时钟时,setTimeout
行为被覆盖。通过jasmine.clock().tick
函数向前勾选时钟时,会触发对任何已注册回调的调用,该函数需要毫秒(链接到jasmine文档)
当时钟通过jasmine.clock(). tick函数向前滴答时,将触发对任何已注册回调的调用,这需要几毫秒。
在您的情况下,测试规范如下所示:
describe('Jasmine 2.0 done()', function() {
beforeEach(function () {
console.log('install');
jasmine.clock().install();
});
afterEach(function () {
console.log('uninstall');
jasmine.clock().uninstall();
});
it('should wait 1ms then complete', function (done) {
setTimeout(function(){
console.log('async');
expect(true).toBe(true);
done();
}, 1);
jasmine.clock().tick(1);
});
});
我使用文件在 Webstorm 8.0.4 中设置了茉莉花集成 这与语法突出显示的工作方式一样,我可以跳转到声明,文档显示正确。所以连接看起来很好。然而,JSHint仍然为每个关键字抱怨它没有被定义,例如 另请参见以下屏幕截图。正如您所看到的,语法突出显示很好,但我仍然收到一个错误。
问题内容: 我通常的测试用例看起来像 而且Jasmine 2.0异步测试应该看起来像 如何在一次测试中同时使用完成和注入? 问题答案: 这应该起作用;我更新到Jasmine 2.0时遇到了同样的问题
我刚刚安装了。我试图将添加到测试中,但遇到错误 ReferenceError:未定义beforeAll 查看堆栈跟踪时,我看到jasmine 1.3.1是量角器的子模块: C:\用户\bmackey\AppData\漫游\npm\node_modules\量角器\node_modules\mini jasminenode\lib\jasmine-1.3.1.js:913: 21 jasmine 2
我正试图写一个Jasmine测试来覆盖一个Twitter Boostrap模态对话框。当调试器行被注释掉时,测试失败。当调试器暂停处理并且我继续时,它通过。我认为引导模式的转换导致了这个问题,因为在我进行expect调用时,模式对话框还不在DOM中。 如何在测试期间禁用转换? 谢谢 感谢Jarred,您的解决方案非常有效!这是我的工作测试:
问题内容: 当我尝试使用 $ httpBackend.flush();时 我收到错误 TypeError:$ browser.cookies不是一个函数。 我找不到有关这种错误和解决方案的任何信息。 角度:1.3.15 茉莉花:2.3.4 问题答案: 我相信您在版本中使用的是角度模拟,而您的代码使用的是angular 。请检查您是否在为应用程序中实现的版本使用模拟程序。同样,提供您的茉莉花测试配置
我熟悉python单元测试测试,如果断言失败,该测试将被标记为“失败”,并继续进行其他测试。另一方面,茉莉花将继续通过所有期望,即使其中一个失败。在第一个预期失败后,如何使Jasmine停止处理测试? 我想错了吗?我有一些测试有很多< code>expect,当只有第一个错误时,显示所有的堆栈跟踪似乎是一种浪费。