我正在使用jasmine-node对我的nodejs函数运行测试.作为nodejs和mongodb的新手,我遇到的第一件事就是测试一些数据库调用,由于nodejs的异步特性,我立即陷入困境.
我想做的是:
1)添加一个add函数以向mongodb表添加新条目
2)从该函数接收状态字符串以验证操作的状态
以下是我的规范代码.在beforeEach通话中,我初始化数据库.正如您在实现中所看到的,它只被实例化一次,因为它询问它是否已经存在.
var mongo = require('../mongo.js');
describe('mongo', function() {
// generate a random number in order to test if the written item and the retrieved result match
var randomNumber = Math.random();
var item = {
'cities': {
'london': randomNumber
}
};
beforeEach(function() {
mongo.init();
waitsFor(function() {
return mongo.getCollection();
}, "should init the database", 10000);
});
it('should return "added" after adding an item to the database', function() {
var result;
waitsFor(function() {
result = …Run Code Online (Sandbox Code Playgroud) 我使用express.js创建了一个简单的Web应用程序,并希望使用jasmine-node进行测试.到目前为止工作正常,但我的问题是我必须每次手动启动服务器,然后才能运行我的测试.
你能帮助我编写一个运行服务器的规范助手(用另一个端口,然后是我的开发端口),仅用于测试然后杀死它吗?
一直在尝试一个简单的异步测试.npm install -g jasmine-node然后安装了jasmine-node 编写了一个简单的模块并进行测试.
简单的模块.
// weather.js
exports.get = function(city, callback) {
callback(city);
};
Run Code Online (Sandbox Code Playgroud)
和测试套件.
// weather-spec.js
var list = require("../modules/weather");
describe("Weather Forecast", function(data) {
it('should get weather for London,UK', function() {
list.get('London,UK', function(data) {
expect(data).toEqual('London,UK');
done();
});
});
});
Run Code Online (Sandbox Code Playgroud)
我收到错误:
Stacktrace:
ReferenceError: done is not defined
Run Code Online (Sandbox Code Playgroud)
鉴于这个简单的例子我无法看到我错在哪里.有人可以帮忙吗?
我设置了grunt来运行node.js jasmine测试.出于某种原因,使用此配置,结果始终显示为测试的两倍.
这是我的配置:
我正在使用插入咕噜声的茉莉花节点.
/spec/some-spec.js:
var myModule = require('../src/myModule.js');
describe('test', function(){
it('works', function(done){
setTimeout(function(){
expect(1).toBe(1);
done();
}, 100);
});
});
Run Code Online (Sandbox Code Playgroud)
Gruntfile.js:
module.exports = function(grunt) {
grunt.initConfig({
jasmine_node: {
options: {
forceExit: true
},
all: ['spec/']
}
});
grunt.loadNpmTasks('grunt-jasmine-node');
grunt.registerTask('default', ['jasmine_node']);
};
Run Code Online (Sandbox Code Playgroud)
这导致两个测试运行而不是一个.
> grunt
Running "jasmine_node:all" (jasmine_node) task
..
Finished in 0.216 seconds
2 tests, 2 assertions, 0 failures, 0 skipped
Run Code Online (Sandbox Code Playgroud) 我在将以下设置的单元测试编写为jira.js文件(在node.js模块中)时遇到问题:
var rest = require('restler'); // https://www.npmjs.com/package/restler
module.exports = function (conf) {
var exported = {};
exported.getIssue = function (issueId, done) {
...
rest.get(uri).on('complete', function(data, response) {
...
};
return exported;
};
Run Code Online (Sandbox Code Playgroud)
现在,我想为我的getIssue函数编写单元测试.'restler'是一个REST客户端,通过它我可以通过我的代码对JIRA API进行REST调用以获取JIRA问题.
因此,为了能够测试createIssue(..),我希望能够在我的Jasmine单元测试中模拟'rest'var.
我该如何模仿这种方法?请给我一些指示,以便我可以继续.我尝试过使用重新布线但是我失败了.
这是我到目前为止无法正常工作(即getIssue方法未定义):
var rewire = require("rewire");
var EventEmitter = require('events').EventEmitter;
var emitter = new EventEmitter();
var cfg = require("../../../config.js").Configuration;
var jiraModule = rewire("../lib/jira")(cfg);
var sinon = require("sinon");
var should = require("should");
// https://github.com/danwrong/restler
var restMock = {
init : function () {
console.log('mock initiated'+JSON.stringify(this));
}, …Run Code Online (Sandbox Code Playgroud) 在试图弄清楚如何使某些茉莉花期望语句依赖于先前的期望声明时,我发现在Jasmine 2.3.0之前,没有办法.(请参阅第一次预期失败后停止茉莉花测试)但是,Jasmine 2.3.0添加了一个选项stopSpecOnExpectationFailure,当设置为true时将停止第一次失败的测试.
对此前景感到兴奋,我修改了我的conf.js以包含选项:
/*
* conf.js
*/
exports.config = {
framework: 'jasmine',
specs: ['search-spec.js'],
useAllAngular2AppRoots: true,
jasmineNodeOpts: {
stopSpecOnExpectationFailure: true
}
};
Run Code Online (Sandbox Code Playgroud)
但这对我不起作用.
在我的测试中,我有:
/**
* Test option from select element is selected
*/
function verifyOptionSelected(option) {
var myEl = $('select[value="' + option + '"]';
expect(myEl.isPresent()).toBe(true, 'Option, ' + option + ', is not a value in the dropdown list. (It might be the text.)');
expect(myEl.isSelected()).toBe(true, 'Option, ' + option + ', is not selected …Run Code Online (Sandbox Code Playgroud) 运行时jasmine,它仅.在测试成功时显示点(),在测试失败时仅显示详细信息。
//test.spec.js
describe('jasmine', ()=>{
it('should show this text', () =>{
});
})
Run Code Online (Sandbox Code Playgroud)
我的运行命令是:jasmine-node test.spec.js
结果:
.
Finished in 0.003 seconds
1 test, 1 assertion, 0 failures, 0 skipped
Run Code Online (Sandbox Code Playgroud)
如何让jasmine显示这个测试结果像这样jasmine should show this text?
如何使用 jasmine-node 和 RequireJS 正确运行 jasmine 测试?
我已经尝试过这样的事情,但不起作用(CoffeeScript):
requirejs = require 'requirejs'
requirejs.config { baseUrl: __dirname + '/../' }
requirejs ['MyClasses', 'FooClass'], (MyClasses, FooClass) ->
describe "someProp", ->
it "should be true", ->
expect(MyClasses.FooClass.someProp).toEqual true
Run Code Online (Sandbox Code Playgroud)
0 秒内完成 0 次测试、0 次断言、0 次失败
我的目标是使用 RequireJS、CoffeeScript 编写模块化类,并且类必须可以使用 jasmine-node(CI 服务器)进行测试。
请问我该怎么做?谢谢!
编辑:
我使用命令执行测试(在带有测试的目录中):
jasmine-node ./
Run Code Online (Sandbox Code Playgroud) 我正在使用jasmine-node来测试我的API,它对我的GET路由非常有用.但是,现在,我需要测试一些POST,但我不确定如何在不更改数据库的情况下进行此操作.
我有一个想法是重置在每个规范结束时我改变的任何值.
这是合理的,还是有更好的方法来测试我的API的POST请求?
我可以用jasmine-node或者只是运行我的规格jasmine.他们都运行我的规格.那么,jasmine-node增加什么价值呢?自述文件说:
这个node.js模块在node.js中提供了精彩的Pivotal Lab的jasmine规范框架. https://github.com/mhevery/jasmine-node/blob/master/README.md
我不明白.我的应用程序运行node,我的规格require节点模块..所以当我运行时jasmine,我已经使用了两个node和jasmine.是什么jasmine-node补充的吗?
我特别不是在询问jasmine-node您最喜欢的原因或其他图书馆的建议.我只想知道,目的是jasmine-node什么?
jasmine-node ×10
node.js ×8
javascript ×7
jasmine ×6
express ×1
gruntjs ×1
http ×1
mocking ×1
mongodb ×1
protractor ×1
requirejs ×1
sinon ×1
tdd ×1
unit-testing ×1