我正在我的开发箱上运行Karma/Jasmine/Angular 2.0测试。就在最近,我的开发箱上的Jasmine决定开始运行我的测试三次。是的,整整三次,每次都是。
在第一次运行时,一切都按预期通过。然而,在第二次和第三次通过时,所有相同的事情都失败了。它总是承认有7次测试,但运行21次,10次失败(一年级数学)???
这在Travis和SauceLabs上也失败了。(注意:这链接到一个包含3个测试的旧版本,但运行了9个,5个失败了???)
我有一个截图,karma.conf.js文件,还有一个套件,它启动了整个过程。非常感谢您的帮助。
完整源代码
describe('From the Conductor Service', () => {
let arr: Array<ComponentStatusModel> = null;
let svc: ConductorService = null;
beforeEach(() => {
arr = [/* Inits the array*/];
svc = new ConductorService();
});
describe('when it is handed a container to hold objects which need to be loaded', () => {
// More passing tests...
/// vvvvv The culprit !!!!!
describe('then when you need to access the container', () => {
beforeEach(() => {
svc.loadedContainer = arr;
});
it('it should always be available', () => {
assertIsLocalDataInTheService(arr, svc.loadedContainer);
});
});
/// ^^^^^ End of culprit !!!!!
});
// More passing tests...
});
不确定这是否相关,但在所有错误发生之前,Jasmine调用堆栈较小(左侧,观察滚动条)。错误开始后,堆栈会随着对相同函数的重复调用而变大(右,观察滚动条)。
在我的测试中,纳米棒和导体规范文件是完全分开的。但是,您可以看到suites阵列包含来自纳米棒和导体规格的内容。不知何故,Jasmine将这两个规范文件混合在一起(在一切都开始失败之后),导致我的descripe()语句在发布到控制台时没有任何意义。
完整源代码
module.exports = function (config) {
config.set({
autoWatch: false,
basePath: '.',
browsers: ['Chrome'],
colors: true,
frameworks: ['jasmine'],
logLevel: config.LOG_INFO,
port: 9876,
reporters: ['coverage', 'progress'],
singleRun: true,
coverageReporter: {
// Code coverage config
},
files: [
// Loads everything I need to work
],
plugins: [
'karma-chrome-launcher',
'karma-coverage',
'karma-jasmine'
],
preprocessors: {
'app/**/*.js': ['coverage']
},
proxies: {
// Adjust the paths
}
})
}
我会试着调试这个问题并找出确切的原因。通常发生在我测试的函数中有重定向代码或任何重载代码的时候。
第一件事是这些测试随机运行。如果您在任何测试用例中传递一些数据,如果您认为可以恢复这是不可能的。
您必须在每个测试用例之前声明数据,以便所有测试用例都获取数据。所有测试用例都独立运行。
如果您使用的是数组或对象,则必须在深度克隆后使用它,因为数组和对象适用于引用。如果您操作任何值,它也会更改原始数组。
在大多数情况下,如果测试失败,您在测试用例中传递的数据可能会出错。
问题内容: 如何从命令行在Node.js上运行Jasmine测试?我已经通过npm安装了jasmine- node并编写了一些测试。我想在目录中运行测试并在终端中获取结果,这可能吗? 问题答案: 编辑 由于不再维护该软件包,因此这似乎不再是当前的最佳答案。请参阅下面的答案 你可以这样做 从您的测试目录 这会将茉莉花安装到../node_modules/jasmine-node 然后 从我的演示中做
问题内容: 我正在尝试通过使用以下代码来检测我的应用程序之前是否已运行: (这是我的默认Android活动) 当我第一次运行该应用程序时,它表示是第一次,当我第二次,第一次,第三次,第一次运行时…。 我使用的是实际的Android设备,而并非每次都使用运行按钮。我使用Eclipse运行按钮运行该应用程序一次,然后关闭该应用程序并在手机上按其图标。 我的代码有问题吗? 问题答案: 更像是在状态之间进
我们已经将(最新的windows)Chrome驱动程序下载到我们的项目中,并且我们能够运行如下Jasmine测试: 但我们未能在pom中设置上述系统属性。xml。我们尝试了<代码> 另一个插件: 我们不确定是否在错误的位置配置了Chromedriver路径。当我们只运行“mvn”时,当它运行jasmine测试时会出现以下错误: [ERROR]起因:ervice.createIllegalState
我正在尝试用Jasmine和RequireJS做一些测试。一切都进行得很好,直到我注意到我所描述的函数的上下文出现了问题。 有人知道怎么解决这个吗?
我为javascript编写了Jasmine测试。我正在尝试使用Phantomjs运行Jasmine测试。我从Phantomjs.org下载了Phantomjs并尝试使用phantomjs.exe//phantom jasmine路径运行它http://localhost/myJasmineTestRunner.html.Google帮不了我。有人能建议我如何使用phantomjs测试jasmin
问题内容: 运行时,输出: 但是,当我再次运行后,所有测试都通过了。 仅当我重置mysql数据库然后首次运行时,测试才会失败。 对于每个请求,我都会做一个请求,以确保在数据库中创建了数据。 谁能帮助我确保测试按顺序运行?那是请求在请求之前运行? 问题答案: 您不能/不应该依赖测试执行顺序。没有定义测试的执行顺序,并且使用测试标志可以排除测试的运行,因此您无法保证它们将完全运行。 例如,以下命令将仅