我有两个 TypeScript 包,一个包(包 A)依赖于另一个(包 B)。每个包都有一个使用 Karma 设置的单元测试。从 NPM 安装所有依赖项后,当我为每个单独运行单元测试时,单元测试运行良好。但是,如果我npm link package-b
在包 A 中使用并运行包 A 的单元测试,我会收到标题中所述的错误:“TS2322:类型‘超时’不可分配给‘数字’类型。”
有问题的线路是对 的调用setTimeout
。挖后,我发现,虽然单独运行测试,没有npm link
,打字稿正确识别setTimeout
的签名typescript/lib/lib.dom
为所需的类型,但在使用后出现故障的情况下,npm link
它使用节点的使用setTimeout
中的签名@types/node/index
。我通过将返回类型更改setTimeout
为string
并string
在Timeout
.
我不确定的是为什么TypeScript 编译器决定在这种特定情况下使用替代定义,也不确定我如何说服它使用所需的定义。我很高兴发布一些代码,但我不确定在这种情况下什么有用,因为失败的线路上只有setTimeout
调用。
我正在编写一个使用新的es6 promises的JavaScript库.我可以在Firefox中测试库,因为已经定义了promises.但是,当我尝试使用Karma和PhantomJS测试我的代码时,我收到错误Can't find variable: Promise.
.我猜这是因为PhantomJS浏览器还不支持es6承诺.
如何配置Karma为承诺引入polyfill?
我是Javascript世界的新手,主要是OOP.我试图在网上查找Karma和Mocha之间的明确区别但是徒劳无功.我知道Karma是一个测试运行器而Mocha是一个单元测试框架,但是Mocha也有自己的驱动程序,可用于在浏览器中运行测试.也就是说,我不明白Karma带来了什么,以及人们为什么一起使用这些.
我的package.json看起来像这样..
"karma-phantomjs-launcher": "^0.1.4",
"karma-safari-launcher": "^0.1.1",
"karma-sinon-chai": "~0.2.0",
"karma-spec-reporter": "~0.0.16",
"mocha": "~1.20.1"
Run Code Online (Sandbox Code Playgroud)
我的npm版本是2.2.0
当我进行业力测试时,我会得到这个 - 业力开始my.conf.js
phantomjs karma-runner karma-mocha mocha-phantomjs karma-coverage
我在我的项目中使用grunt配置我的Karma amd mocha框架.当我运行业力开始时,我得到了下面提到的错误.
我在运行命令时在控制台中收到此错误: Karma start
TypeError: expect(...).to.be is not a function
Run Code Online (Sandbox Code Playgroud)
我的Karma.confjs
// Karma configuration
// Generated on Fri Nov 27 2015 11:48:47 GMT+0530 (India Standard Time)
module.exports = function(config) {
config.set({
// base path that will be used to resolve all patterns (eg. files, exclude)
basePath: '',
// frameworks to use
// available frameworks: https://npmjs.org/browse/keyword/karma-adapter
frameworks: ['mocha', 'chai'],
// list of files / patterns to load in the browser
files: [
'bower_components/angular/angular.js',
'bower_components/angular-mocks/angular-mocks.js',
'app/*.js',
// 'test/specs/*.js',
'test/specs/array.js',
// …
Run Code Online (Sandbox Code Playgroud) 问题: 我如何在mocha中编写一个post请求测试,测试响应是否匹配?
响应将只是一个url字符串,因为它是第三方服务的重定向.
工作示例有效负载:
curl -H "Content-Type: application/json" -X POST -d '{"participant":{"nuid":"98ASDF988SDF89SDF89989SDF9898"}}' http://localhost:9000/api/members
Run Code Online (Sandbox Code Playgroud)
member.controller.js // post方法
// Creates a new member in the DB.
exports.create = function(req, res) {
Member.findByIdAndUpdate(req.body.participant.nuid,
{ "$setOnInsert": { "_id": req.body.participant.nuid } },
{ "upsert": true },
function(err,doc) {
if (err) throw err;
res.send({
'redirectUrl': req.protocol + '://' + req.get('host') + '/registration/' + req.body.participant.nuid
})
}
);
};
Run Code Online (Sandbox Code Playgroud)
预计res.send
{"redirectUrl":"http://localhost:9000/registration/98ASDF988SDF89SDF89989SDF9898"}
Run Code Online (Sandbox Code Playgroud)
工作示例GET请求测试
var should = require('should');
var app = require('../../app');
var request = require('supertest');
describe('GET /api/members', function() …
Run Code Online (Sandbox Code Playgroud) 我正在尝试用Mocha编写的测试来运行Karma,它们有点工作,但我不能使用done()方法来实现异步测试,这实际上使得这些工具对我来说毫无用处.我错过了什么?
karma.conf.js
module.exports = function(config) {
config.set({
basePath: '../..',
frameworks: ['mocha', 'requirejs', 'qunit'],
client: {
mocha: {
ui: 'bdd'
}
},
files: [
{pattern: 'libs/**/*.js', included: false},
{pattern: 'src/**/*.js', included: false},
{pattern: 'tests/mocha/mocha.js', included: false},
{pattern: 'tests/should/should.js', included: false},
{pattern: 'tests/**/*Spec.js', included: false},
'tests/karma/test-main.js'
],
exclude: [
'src/main.js'
],
// test results reporter to use
// possible values: 'dots', 'progress', 'junit', 'growl', 'coverage'
reporters: ['progress', 'dots'],
port: 9876,
colors: true,
// possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO …
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用karma服务器和nock创建一些基本测试.似乎nock根本没有拦截我的请求,有没有人有想法?我无法弄清楚遗漏了什么.我仍然得到真实的数据.
nock('https://api.github.com/users/' + username).log(console.log)
.get('/')
.query(true)
.reply(400, {
statusMessage: 'Bad Request',
foo: 'foo'
})
http.get('https://api.github.com/users/' + username, function(res) {
console.log('res', res)
})
Run Code Online (Sandbox Code Playgroud)
我还添加了这个中间件
const middlewares = [thunk];
const mockStore = configureStore(middlewares);
Run Code Online (Sandbox Code Playgroud)
======更新6月6日======
使用react-redux的整个流程这是我的测试:
import configureStore from 'redux-mock-store';
import thunk from 'redux-thunk';
import axios from 'axios';
import expect from 'expect';
import * as actions from 'actions/test-actions'
import * as types from 'types';
import nock from 'nock'
import { username } from 'constansts'
const middlewares = [thunk];
const mockStore = configureStore(middlewares);
describe('Asynchronous …
Run Code Online (Sandbox Code Playgroud) 我使用Karma,Webpack,酶,PhantomJS来测试我的反应项目.当我运行以下命令运行测试用例时,
./node_modules/karma/bin/karma start config/karma.conf.js --single-run --browsers PhantomJS
Run Code Online (Sandbox Code Playgroud)
我得到以下错误:
PhantomJS 2.1.1 (Mac OS X 0.0.0) ERROR
ReferenceError: Can't find variable: require
at /dev/test/test.js:3
Run Code Online (Sandbox Code Playgroud)
在test.js的源代码的line3中,我没有使用require
,下面是代码:
import { expect } from 'chai';
Run Code Online (Sandbox Code Playgroud)
我想为什么PhantomJS抱怨这个错误.
下面是我的业力配置文件:
var path = require('path');
var webpackconf = require("./webpack.config")
module.exports = function(config) {
config.set({
basePath: '',
frameworks: ['mocha', 'chai'],
files: [
'../test/**/*.js'
],
preprocessors: {
// add webpack as preprocessor
'../src/**/*.js': ['babel'],
'../test/**/*.js': ['babel'],
'../src/**/*.less': ['babel']
},
webpack: { //kind of a copy of your webpack config
devtool: …
Run Code Online (Sandbox Code Playgroud) karma-mocha ×10
karma-runner ×7
mocha.js ×4
javascript ×3
node.js ×2
phantomjs ×2
reactjs ×2
unit-testing ×2
enzyme ×1
es6-promise ×1
nock ×1
testing ×1
typescript ×1
webpack ×1